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 7403 – NEMO

Changeset 7403


Ignore:
Timestamp:
2016-11-30T17:56:53+01:00 (7 years ago)
Author:
timgraham
Message:

Merge dev_INGV_METO_merge_2016 into branch

Location:
branches/2016/dev_merge_2016/NEMOGCM
Files:
7 deleted
118 edited
14 copied

Legend:

Unmodified
Added
Removed
  • branches/2016/dev_merge_2016/NEMOGCM/ARCH/INGV/arch-IBM_EKMAN_INGV.fcm

    r5656 r7403  
    3434%USER_INC            -I%XIOS_ROOT/inc %NCDF_INC %MPI_INTEL -I/srv/lib/zlib-last/include 
    3535%USER_LIB            -L%XIOS_ROOT/lib -lxios %NCDF_LIB -L/srv/lib/zlib-last/lib -lz 
     36%CC                  icc 
     37%CFLAGS              -O0 
  • branches/2016/dev_merge_2016/NEMOGCM/CONFIG/GYRE_PISCES/EXP00/namelist_pisces_cfg

    r4147 r7403  
    11!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    2 !! GYRE_PISCES: Configuration namelist used to overwrite SHARED/namelist_pisces_ref 
     2!! PISCES  (key_pisces) reference namelist (see below for key_pisces_reduced) 
     3!!              1  - air-sea exchange                         (nampisext) 
     4!!              2  - biological parameters                    (nampisbio) 
     5!!              3  - parameters for nutrient limitations      (nampislim)     
     6!!              4  - parameters for phytoplankton             (nampisprod,nampismort) 
     7!!              5  - parameters for zooplankton               (nampismes,nampiszoo) 
     8!!              6  - parameters for remineralization          (nampisrem) 
     9!!              7  - parameters for calcite chemistry         (nampiscal) 
     10!!              8  - parameters for inputs deposition         (nampissed) 
     11!!              11 - Damping                                  (nampisdmp) 
     12!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     13!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     14&nampismod     !  Model used  
     15!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     16    ln_p4z = .false. 
     17    ln_p2z = .true. 
     18/ 
     19!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     20&nampisext     !   air-sea exchange 
     21!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     22/ 
     23!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     24&nampisatm     !  Atmospheric prrssure  
     25!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     26/ 
     27!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     28&nampisbio     !   biological parameters 
     29!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     30/ 
     31!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     32&nampislim     !   parameters for nutrient limitations 
     33!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     34/ 
     35!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     36&nampisopt     !   parameters for optics 
     37!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     38/  
     39!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     40&nampisprod     !   parameters for phytoplankton growth 
     41!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     42/ 
     43!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     44&nampismort     !   parameters for phytoplankton sinks 
     45!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     46/ 
     47!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     48&nampismes     !   parameters for mesozooplankton 
     49!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     50/ 
     51!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     52&nampiszoo     !   parameters for microzooplankton 
     53!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     54/ 
     55!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     56&nampisfer     !   parameters for iron chemistry 
     57!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     58 
     59!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     60&nampisrem     !   parameters for remineralization 
     61!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     62/ 
     63!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     64&nampiscal     !   parameters for Calcite chemistry 
     65!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     66/ 
     67!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     68&nampissbc     !   parameters for inputs deposition 
     69!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     70/ 
     71!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     72&nampisice      !  Prescribed sea ice tracers 
     73!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     74/ 
     75!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     76&nampisdmp     !  Damping  
     77!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     78/ 
     79!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     80&nampismass     !  Mass conservation 
     81!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     82/ 
     83!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     84!! PISCES reduced (key_pisces_reduced, ex LOBSTER) : namelists 
     85!!              1  - biological parameters for phytoplankton    (namlobphy) 
     86!!              2  - biological parameters for nutrients        (namlobnut) 
     87!!              3  - biological parameters for zooplankton      (namlobzoo)     
     88!!              4  - biological parameters for detritus         (namlobdet) 
     89!!              5  - biological parameters for DOM              (namlobdom) 
     90!!              6  - parameters from aphotic layers to sediment (namlobsed) 
     91!!              7  - general coefficients                       (namlobrat) 
     92!!              8  - optical parameters                         (namlobopt) 
     93!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    394!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    495&namlobphy     !   biological parameters for phytoplankton 
     
    15106!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    16107&namlobdet     !   biological parameters for detritus 
    17 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,        
     108!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    18109/ 
    19110!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
  • branches/2016/dev_merge_2016/NEMOGCM/CONFIG/GYRE_PISCES/EXP00/namelist_top_cfg

    r5836 r7403  
    11!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    2 !! NEMO-TOP Configuration namelist for GYRE_PISCES configuration used to overwrite SHARED/namelist_top_ref 
     2!! NEMO/TOP1 :  Configuration namelist : used to overwrite defaults values defined in SHARED/namelist_top_ref 
     3!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    34!----------------------------------------------------------------------- 
    45&namtrc_run     !   run information 
    56!----------------------------------------------------------------------- 
    6    nn_writetrc   =  60     !  time step frequency for sn_tracer outputs 
    77/ 
    88!----------------------------------------------------------------------- 
    99&namtrc     !   tracers definition 
    1010!----------------------------------------------------------------------- 
    11    ln_trcdta     =   .false.    !  Initialisation from data input file (T) or not (F) 
     11   jp_bgc        =  6 
    1212! 
    13 !                ! name  !     title of the field          !   units       ! initial data ! save   ! 
    14 !                !       !                                 !               ! from file    ! or not ! 
    15 !                !       !                                 !               ! or not       !        ! 
    16    sn_tracer(1)   = 'DET'   , 'Detritus                   ',  'mmole-N/m3' ,  .false.     ,  .false. 
    17    sn_tracer(2)   = 'ZOO'   , 'Zooplankton concentration  ',  'mmole-N/m3' ,  .false.     ,  .false. 
    18    sn_tracer(3)   = 'PHY'   , 'Phytoplankton concentration',  'mmole-N/m3' ,  .false.     ,  .false. 
    19    sn_tracer(4)   = 'NO3'   , 'Nitrate concentration      ',  'mmole-N/m3' ,  .false.     ,  .true. 
    20    sn_tracer(5)   = 'NH4'   , 'Ammonium concentration     ',  'mmole-N/m3' ,  .false.     ,  .false. 
    21    sn_tracer(6)   = 'DOM'   , 'Dissolved organic matter   ',  'mmole-N/m3' ,  .false.     ,  .false. 
     13   ln_pisces     =  .true. 
     14   ln_age        =  .false. 
     15   ln_cfc11      =  .false. 
     16   ln_cfc12      =  .false. 
     17   ln_c14        =  .false. 
     18   ln_my_trc     =  .false. 
     19! 
     20!                 !           !                             !               ! 
     21!                 !    name   !   title of the field        !   units       ! initial data from file or not ! 
     22!                 !           !                                             !                               ! 
     23   sn_tracer(1)   = 'DET'     , 'Detritus                   ',  'mmole-N/m3' ,  .false.     
     24   sn_tracer(2)   = 'ZOO'     , 'Zooplankton concentration  ',  'mmole-N/m3' ,  .false.    
     25   sn_tracer(3)   = 'PHY'     , 'Phytoplankton concentration',  'mmole-N/m3' ,  .false.   
     26   sn_tracer(4)   = 'NO3'     , 'Nitrate concentration      ',  'mmole-N/m3' ,  .false.  
     27   sn_tracer(5)   = 'NH4'     , 'Ammonium concentration     ',  'mmole-N/m3' ,  .false.    
     28   sn_tracer(6)   = 'DOM'     , 'Dissolved organic matter   ',  'mmole-N/m3' ,  .false.   
    2229/ 
    2330!----------------------------------------------------------------------- 
    24 &namtrc_adv    !   advection scheme for passive tracer  
    25 !-----------------------------------------------------------------------    
     31&namtrc_dta      !    Initialisation from data input file 
     32!----------------------------------------------------------------------- 
     33/ 
    2634   ln_trcadv_fct =  .true.   !  FCT scheme 
    27       nn_fct_h   =  2               !  =2/4, horizontal 2nd / 4th order  
    28       nn_fct_v   =  2               !  =2/4, vertical   2nd / COMPACT 4th order  
     35      nn_fct_h   =  2               !  =2/4, horizontal 2nd / 4th order 
     36      nn_fct_v   =  2               !  =2/4, vertical   2nd / COMPACT 4th order 
    2937      nn_fct_zts =  0               !  >=1,  2nd order FCT scheme with vertical sub-timestepping 
    3038      !                             !        (number of sub-timestep = nn_fct_zts) 
    3139/ 
    3240!----------------------------------------------------------------------- 
    33 &namtrc_ldf    !   lateral diffusion scheme for passive tracer  
     41&namtrc_ldf    !   lateral diffusion scheme for passive tracer 
    3442!----------------------------------------------------------------------- 
    3543   rn_ahtrc_0       =  1000.    !  horizontal eddy diffusivity for tracers [m2/s] 
     
    4048/ 
    4149!----------------------------------------------------------------------- 
    42 &namtrc_rad        !  treatment of negative concentrations  
     50&namtrc_rad        !  treatment of negative concentrations 
    4351!----------------------------------------------------------------------- 
    4452   ln_trcrad   =  .false.  !  artificially correct negative concentrations (T) or not (F) 
    4553/ 
    4654!----------------------------------------------------------------------- 
    47 &namtrc_dia       !   parameters for passive tracer additional diagnostics 
     55&namtrc_dmp      !   passive tracer newtonian damping 
     56!----------------------------------------------------------------------- 
     57/ 
     58!----------------------------------------------------------------------- 
     59&namtrc_ice      !    Representation of sea ice growth & melt effects 
     60!----------------------------------------------------------------------- 
     61/ 
     62!----------------------------------------------------------------------- 
     63&namtrc_trd      !   diagnostics on tracer trends                       ('key_trdtrc') 
     64!                          or mixed-layer trends                        ('key_trdmld_trc') 
    4865!---------------------------------------------------------------------- 
    49    nn_writedia   =  60     !  time step frequency for diagnostics 
    5066/ 
    5167!---------------------------------------------------------------------- 
    52 &namtrc_bc        !   data for boundary conditions 
     68&namtrc_bc       !   data for boundary conditions 
    5369!----------------------------------------------------------------------- 
    5470/ 
     71!---------------------------------------------------------------------- 
     72&namtrc_bdy      !   Setup of tracer boundary conditions 
     73!----------------------------------------------------------------------- 
     74/ 
  • branches/2016/dev_merge_2016/NEMOGCM/CONFIG/GYRE_PISCES/cpp_GYRE_PISCES.fcm

    r5930 r7403  
    1 bld::tool::fppkeys key_zdftke key_top key_pisces_reduced key_mpp_mpi 
     1bld::tool::fppkeys key_zdftke key_top key_mpp_mpi 
  • branches/2016/dev_merge_2016/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/iodef.xml

    r5385 r7403  
    176176          <field field_ref="CO3sat"   /> 
    177177          <field field_ref="PAR"      /> 
    178           <field field_ref="PPPHY"    /> 
    179           <field field_ref="PPPHY2"   /> 
     178          <field field_ref="PPPHYN"    /> 
     179          <field field_ref="PPPHYD"   /> 
    180180          <field field_ref="PPNEWN"   /> 
    181181          <field field_ref="PPNEWD"   /> 
  • branches/2016/dev_merge_2016/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/namelist_pisces_cfg

    r4147 r7403  
    11!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    2 !! PISCES  :   Configuration namelist : used to overwrite defaults values defined in SHARED/namelist_pis_ref 
    3 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     2!! PISCES reference namelist  
     3!!              1  - air-sea exchange                         (nampisext) 
     4!!              2  - biological parameters                    (nampisbio) 
     5!!              3  - parameters for nutrient limitations      (nampislim)     
     6!!              4  - parameters for phytoplankton             (nampisprod,nampismort) 
     7!!              5  - parameters for zooplankton               (nampismes,nampiszoo) 
     8!!              6  - parameters for remineralization          (nampisrem) 
     9!!              7  - parameters for calcite chemistry         (nampiscal) 
     10!!              8  - parameters for inputs deposition         (nampissed) 
     11!!              11 - Damping                                  (nampisdmp) 
     12!----------------------------------------------------------------------- 
     13&nampismod     !  Model used  
     14!----------------------------------------------------------------------- 
     15/ 
     16!----------------------------------------------------------------------- 
     17&nampisext     !   air-sea exchange 
     18!----------------------------------------------------------------------- 
     19/ 
     20!----------------------------------------------------------------------- 
     21&nampisatm     !  Atmospheric prrssure  
     22!----------------------------------------------------------------------- 
     23/ 
     24!----------------------------------------------------------------------- 
     25&nampisbio     !   biological parameters 
     26!----------------------------------------------------------------------- 
     27/ 
     28!----------------------------------------------------------------------- 
     29&namp4zlim     !   parameters for nutrient limitations for PISCES std - ln_p4z 
     30!----------------------------------------------------------------------- 
     31/ 
     32!----------------------------------------------------------------------- 
     33&namp5zlim     !   parameters for nutrient limitations PISCES QUOTA - ln_p5z 
     34!----------------------------------------------------------------------- 
     35/ 
     36!----------------------------------------------------------------------- 
     37&namp5zquota    !   parameters for nutrient limitations PISCES quota - ln_p5z 
     38!----------------------------------------------------------------------- 
     39/ 
     40!----------------------------------------------------------------------- 
     41&nampisopt     !   parameters for optics 
     42!----------------------------------------------------------------------- 
     43/  
     44!----------------------------------------------------------------------- 
     45&namp4zprod     !   parameters for phytoplankton growth for PISCES std - ln_p4z 
     46!----------------------------------------------------------------------- 
     47/ 
    448!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    5 &nampisext     !   air-sea exchange 
     49&namp5zprod     !   parameters for phytoplankton growth for PISCES quota - ln_p5z 
    650!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    751/ 
    8 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    9 &nampisatm     !  Atmospheric prrssure  
    10 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     52!----------------------------------------------------------------------- 
     53&namp4zmort     !   parameters for phytoplankton sinks for PISCES std - ln_p4z 
     54!----------------------------------------------------------------------- 
    1155/ 
    12 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    13 &nampisbio     !   biological parameters 
    14 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     56!----------------------------------------------------------------------- 
     57&namp5zmort     !   parameters for phytoplankton sinks for PISCES quota - ln_p5z 
     58!----------------------------------------------------------------------- 
    1559/ 
    16 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    17 &nampislim     !   parameters for nutrient limitations 
    18 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     60!----------------------------------------------------------------------- 
     61&namp4zmes     !   parameters for mesozooplankton for PISCES std - ln_p4z 
     62!----------------------------------------------------------------------- 
    1963/ 
    20 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    21 &nampisopt     !   parameters for optics 
    22 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    23 /  
    24 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    25 &nampisprod     !   parameters for phytoplankton growth 
    26 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     64!----------------------------------------------------------------------- 
     65&namp5zmes     !   parameters for mesozooplankton 
     66!----------------------------------------------------------------------- 
    2767/ 
    28 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    29 &nampismort     !   parameters for phytoplankton sinks 
    30 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     68!----------------------------------------------------------------------- 
     69&namp4zzoo     !   parameters for microzooplankton for PISCES std - ln_p4z 
     70!----------------------------------------------------------------------- 
    3171/ 
    32 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    33 &nampismes     !   parameters for mesozooplankton 
    34 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     72!----------------------------------------------------------------------- 
     73&namp5zzoo     !   parameters for microzooplankton 
     74!----------------------------------------------------------------------- 
    3575/ 
    36 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    37 &nampiszoo     !   parameters for microzooplankton 
    38 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     76!----------------------------------------------------------------------- 
     77&nampisfer     !   parameters for iron chemistry 
     78!----------------------------------------------------------------------- 
    3979/ 
    40 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    41 &nampisfer     !   parameters for iron chemistry 
    42 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    43  
    44 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     80!-----------------------------------------------------------------------   
    4581&nampisrem     !   parameters for remineralization 
    46 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     82!----------------------------------------------------------------------- 
    4783/ 
    48 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     84!----------------------------------------------------------------------- 
     85&nampispoc     !   parameters for organic particles 
     86!----------------------------------------------------------------------- 
     87/ 
     88!----------------------------------------------------------------------- 
    4989&nampiscal     !   parameters for Calcite chemistry 
    50 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     90!----------------------------------------------------------------------- 
    5191/ 
    52 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     92!----------------------------------------------------------------------- 
    5393&nampissbc     !   parameters for inputs deposition 
    54 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     94!----------------------------------------------------------------------- 
    5595/ 
    56 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     96!----------------------------------------------------------------------- 
     97&nampislig      !  Namelist parameters for ligands, nampislig 
     98!----------------------------------------------------------------------- 
     99/ 
     100!----------------------------------------------------------------------- 
     101&nampisice      !  Prescribed sea ice tracers 
     102!----------------------------------------------------------------------- 
     103/ 
     104!----------------------------------------------------------------------- 
    57105&nampisdmp     !  Damping  
    58 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     106!----------------------------------------------------------------------- 
    59107/ 
    60 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     108!----------------------------------------------------------------------- 
    61109&nampismass     !  Mass conservation 
    62 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     110!----------------------------------------------------------------------- 
    63111/ 
     112!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     113!! PISCES reduced (key_pisces_reduced, ex LOBSTER) : namelists 
     114!!              1  - biological parameters for phytoplankton    (namlobphy) 
     115!!              2  - biological parameters for nutrients        (namlobnut) 
     116!!              3  - biological parameters for zooplankton      (namlobzoo)     
     117!!              4  - biological parameters for detritus         (namlobdet) 
     118!!              5  - biological parameters for DOM              (namlobdom) 
     119!!              6  - parameters from aphotic layers to sediment (namlobsed) 
     120!!              7  - general coefficients                       (namlobrat) 
     121!!              8  - optical parameters                         (namlobopt) 
     122!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     123!----------------------------------------------------------------------- 
     124&namlobphy     !   biological parameters for phytoplankton 
     125!----------------------------------------------------------------------- 
     126/ 
     127!----------------------------------------------------------------------- 
     128&namlobnut     !   biological parameters for nutrients 
     129!----------------------------------------------------------------------- 
     130/ 
     131!----------------------------------------------------------------------- 
     132&namlobzoo     !   biological parameters for zooplankton 
     133!----------------------------------------------------------------------- 
     134/ 
     135!----------------------------------------------------------------------- 
     136&namlobdet     !   biological parameters for detritus 
     137!----------------------------------------------------------------------- 
     138/ 
     139!----------------------------------------------------------------------- 
     140&namlobdom     !   biological parameters for DOM 
     141!----------------------------------------------------------------------- 
     142/ 
     143!----------------------------------------------------------------------- 
     144&namlobsed     !   parameters from aphotic layers to sediment 
     145!----------------------------------------------------------------------- 
     146/ 
     147!----------------------------------------------------------------------- 
     148&namlobrat     !   general coefficients 
     149!----------------------------------------------------------------------- 
     150/ 
     151!----------------------------------------------------------------------- 
     152&namlobopt     !   optical parameters 
     153!----------------------------------------------------------------------- 
     154/ 
  • branches/2016/dev_merge_2016/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/EXP00/namelist_top_cfg

    r6140 r7403  
    55&namtrc_run     !   run information 
    66!----------------------------------------------------------------------- 
     7   ln_top_euler  = .true. 
    78/ 
    89!----------------------------------------------------------------------- 
    910&namtrc     !   tracers definition 
    1011!----------------------------------------------------------------------- 
    11 !                !    name   !           title of the field              ! initial data ! initial data ! save   ! 
    12 !                !           !                                           !  units       ! from file    ! or not !  
    13 !                !           !                                           !              ! or not       !        ! 
    14    sn_tracer(1)   = 'DIC     ' , 'Dissolved inorganic Concentration      ',  'mol-C/L' ,  .true.     ,  .true. 
    15    sn_tracer(2)   = 'Alkalini' , 'Total Alkalinity Concentration         ',  'eq/L '   ,  .true.     ,  .true. 
    16    sn_tracer(3)   = 'O2      ' , 'Dissolved Oxygen Concentration         ',  'mol-C/L' ,  .true.     ,  .true. 
    17    sn_tracer(4)   = 'CaCO3   ' , 'Calcite Concentration                  ',  'mol-C/L' ,  .false.    ,  .true. 
    18    sn_tracer(5)   = 'PO4     ' , 'Phosphate Concentration                ',  'mol-C/L' ,  .true.     ,  .true. 
    19    sn_tracer(6)   = 'POC     ' , 'Small organic carbon Concentration     ',  'mol-C/L' ,  .false.    ,  .true. 
    20    sn_tracer(7)   = 'Si      ' , 'Silicate Concentration                 ',  'mol-C/L' ,  .true.     ,  .true. 
    21    sn_tracer(8)   = 'PHY     ' , 'Nanophytoplankton Concentration        ',  'mol-C/L' ,  .false.    ,  .true. 
    22    sn_tracer(9)   = 'ZOO     ' , 'Microzooplankton Concentration         ',  'mol-C/L' ,  .false.    ,  .true. 
    23    sn_tracer(10)  = 'DOC     ' , 'Dissolved organic Concentration        ',  'mol-C/L' ,  .true.     ,  .true. 
    24    sn_tracer(11)  = 'PHY2    ' , 'Diatoms Concentration                  ',  'mol-C/L' ,  .false.    ,  .true. 
    25    sn_tracer(12)  = 'ZOO2    ' , 'Mesozooplankton Concentration          ',  'mol-C/L' ,  .false.    ,  .true. 
    26    sn_tracer(13)  = 'DSi     ' , 'Diatoms Silicate Concentration         ',  'mol-C/L' ,  .false.    ,  .true. 
    27    sn_tracer(14)  = 'Fer     ' , 'Dissolved Iron Concentration           ',  'mol-C/L' ,  .true.     ,  .true. 
    28    sn_tracer(15)  = 'BFe     ' , 'Big iron particles Concentration       ',  'mol-C/L' ,  .false.    ,  .true. 
    29    sn_tracer(16)  = 'GOC     ' , 'Big organic carbon Concentration       ',  'mol-C/L' ,  .false.    ,  .true. 
    30    sn_tracer(17)  = 'SFe     ' , 'Small iron particles Concentration     ',  'mol-C/L' ,  .false.    ,  .true. 
    31    sn_tracer(18)  = 'DFe     ' , 'Diatoms iron  Concentration            ',  'mol-C/L' ,  .false.    ,  .true. 
    32    sn_tracer(19)  = 'GSi     ' , 'Sinking biogenic Silicate Concentration',  'mol-C/L' ,  .false.    ,  .true. 
    33    sn_tracer(20)  = 'NFe     ' , 'Nano iron Concentration                ',  'mol-C/L' ,  .false.    ,  .true. 
    34    sn_tracer(21)  = 'NCHL    ' , 'Nano chlorophyl Concentration          ',  'mol-C/L' ,  .false.    ,  .true. 
    35    sn_tracer(22)  = 'DCHL    ' , 'Diatoms chlorophyl Concentration       ',  'mol-C/L' ,  .false.    ,  .true. 
    36    sn_tracer(23)  = 'NO3     ' , 'Nitrates Concentration                 ',  'mol-C/L' ,  .true.     ,  .true. 
    37    sn_tracer(24)  = 'NH4     ' , 'Ammonium Concentration                 ',  'mol-C/L' ,  .false.    ,  .true. 
     12   jp_bgc        =  24 
     13! 
     14   ln_pisces     =  .true. 
     15   ln_age        =  .false. 
     16   ln_cfc11      =  .false. 
     17   ln_cfc12      =  .false. 
     18   ln_c14        =  .false. 
     19   ln_my_trc     =  .false. 
     20! 
     21   ln_trcdta     =  .true.  !  Initialisation from data input file (T) or not (F) 
     22!                 !           !                                          !             ! 
     23!                 !    name   !           title of the field             !   units     ! initial data from file or not ! 
     24!                 !           !                                          !             ! 
     25   sn_tracer(1)   = 'DIC     ' , 'Dissolved inorganic Concentration      ',  'mol-C/L' ,  .true. 
     26   sn_tracer(2)   = 'Alkalini' , 'Total Alkalinity Concentration         ',  'eq/L '   ,  .true. 
     27   sn_tracer(3)   = 'O2      ' , 'Dissolved Oxygen Concentration         ',  'mol-C/L' ,  .true. 
     28   sn_tracer(4)   = 'CaCO3   ' , 'Calcite Concentration                  ',  'mol-C/L' ,  .false. 
     29   sn_tracer(5)   = 'PO4     ' , 'Phosphate Concentration                ',  'mol-C/L' ,  .true. 
     30   sn_tracer(6)   = 'POC     ' , 'Small organic carbon Concentration     ',  'mol-C/L' ,  .false. 
     31   sn_tracer(7)   = 'Si      ' , 'Silicate Concentration                 ',  'mol-C/L' ,  .true. 
     32   sn_tracer(8)   = 'PHY     ' , 'Nanophytoplankton Concentration        ',  'mol-C/L' ,  .false. 
     33   sn_tracer(9)   = 'ZOO     ' , 'Microzooplankton Concentration         ',  'mol-C/L' ,  .false. 
     34   sn_tracer(10)  = 'DOC     ' , 'Dissolved organic Concentration        ',  'mol-C/L' ,  .true. 
     35   sn_tracer(11)  = 'PHY2    ' , 'Diatoms Concentration                  ',  'mol-C/L' ,  .false. 
     36   sn_tracer(12)  = 'ZOO2    ' , 'Mesozooplankton Concentration          ',  'mol-C/L' ,  .false. 
     37   sn_tracer(13)  = 'DSi     ' , 'Diatoms Silicate Concentration         ',  'mol-C/L' ,  .false. 
     38   sn_tracer(14)  = 'Fer     ' , 'Dissolved Iron Concentration           ',  'mol-C/L' ,  .true. 
     39   sn_tracer(15)  = 'BFe     ' , 'Big iron particles Concentration       ',  'mol-C/L' ,  .false. 
     40   sn_tracer(16)  = 'GOC     ' , 'Big organic carbon Concentration       ',  'mol-C/L' ,  .false. 
     41   sn_tracer(17)  = 'SFe     ' , 'Small iron particles Concentration     ',  'mol-C/L' ,  .false. 
     42   sn_tracer(18)  = 'DFe     ' , 'Diatoms iron  Concentration            ',  'mol-C/L' ,  .false. 
     43   sn_tracer(19)  = 'GSi     ' , 'Sinking biogenic Silicate Concentration',  'mol-C/L' ,  .false. 
     44   sn_tracer(20)  = 'NFe     ' , 'Nano iron Concentration                ',  'mol-C/L' ,  .false. 
     45   sn_tracer(21)  = 'NCHL    ' , 'Nano chlorophyl Concentration          ',  'mol-C/L' ,  .false. 
     46   sn_tracer(22)  = 'DCHL    ' , 'Diatoms chlorophyl Concentration       ',  'mol-C/L' ,  .false. 
     47   sn_tracer(23)  = 'NO3     ' , 'Nitrates Concentration                 ',  'mol-C/L' ,  .true. 
     48   sn_tracer(24)  = 'NH4     ' , 'Ammonium Concentration                 ',  'mol-C/L' ,  .false. 
    3849/ 
    3950!----------------------------------------------------------------------- 
     
    7889/ 
    7990!----------------------------------------------------------------------- 
    80 &namtrc_dia       !   parameters for passive tracer additional diagnostics 
     91&namtrc_dmp      !   passive tracer newtonian damping 
     92!----------------------------------------------------------------------- 
     93/ 
     94!----------------------------------------------------------------------- 
     95&namtrc_ice      !    Representation of sea ice growth & melt effects 
     96!----------------------------------------------------------------------- 
     97/ 
     98!----------------------------------------------------------------------- 
     99&namtrc_trd      !   diagnostics on tracer trends                       ('key_trdtrc') 
     100!                          or mixed-layer trends                        ('key_trdmld_trc') 
    81101!---------------------------------------------------------------------- 
    82102/ 
    83103!---------------------------------------------------------------------- 
    84 &namtrc_bc        !   data for boundary conditions 
     104&namtrc_bc       !   data for boundary conditions 
    85105!----------------------------------------------------------------------- 
    86106/ 
     107!---------------------------------------------------------------------- 
     108&namtrc_bdy      !   Setup of tracer boundary conditions 
     109!----------------------------------------------------------------------- 
  • branches/2016/dev_merge_2016/NEMOGCM/CONFIG/ORCA2_LIM_PISCES/cpp_ORCA2_LIM_PISCES.fcm

    r5930 r7403  
    1 bld::tool::fppkeys key_trabbl key_lim2 key_zdftke key_zdfddm key_zdftmx key_top key_pisces key_mpp_mpi key_iomput 
     1bld::tool::fppkeys key_trabbl key_lim2 key_zdftke key_zdfddm key_zdftmx key_top key_mpp_mpi key_iomput 
  • branches/2016/dev_merge_2016/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/iodef.xml

    r5385 r7403  
    108108          <field field_ref="CO3sat"   /> 
    109109          <field field_ref="PAR"      /> 
    110           <field field_ref="PPPHY"    /> 
    111           <field field_ref="PPPHY2"   /> 
     110          <field field_ref="PPPHYN"    /> 
     111          <field field_ref="PPPHYD"   /> 
    112112          <field field_ref="PPNEWN"   /> 
    113113          <field field_ref="PPNEWD"   /> 
  • branches/2016/dev_merge_2016/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/namelist_pisces_cfg

    r4147 r7403  
    11!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    2 !! PISCES  :   ORCA2_OFF_PISCES configuration namelsit used to overwrite SHARED/namelist_pisces_ref 
    3 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     2!! PISCES reference namelist  
     3!!              1  - air-sea exchange                         (nampisext) 
     4!!              2  - biological parameters                    (nampisbio) 
     5!!              3  - parameters for nutrient limitations      (nampislim)     
     6!!              4  - parameters for phytoplankton             (nampisprod,nampismort) 
     7!!              5  - parameters for zooplankton               (nampismes,nampiszoo) 
     8!!              6  - parameters for remineralization          (nampisrem) 
     9!!              7  - parameters for calcite chemistry         (nampiscal) 
     10!!              8  - parameters for inputs deposition         (nampissed) 
     11!!              11 - Damping                                  (nampisdmp) 
     12!----------------------------------------------------------------------- 
     13&nampismod     !  Model used  
     14!----------------------------------------------------------------------- 
     15/ 
     16!----------------------------------------------------------------------- 
     17&nampisext     !   air-sea exchange 
     18!----------------------------------------------------------------------- 
     19/ 
     20!----------------------------------------------------------------------- 
     21&nampisatm     !  Atmospheric prrssure  
     22!----------------------------------------------------------------------- 
     23/ 
     24!----------------------------------------------------------------------- 
     25&nampisbio     !   biological parameters 
     26!----------------------------------------------------------------------- 
     27   nrdttrc    =  4        ! time step frequency for biology 
     28/ 
     29!----------------------------------------------------------------------- 
     30&namp4zlim     !   parameters for nutrient limitations for PISCES std - ln_p4z 
     31!----------------------------------------------------------------------- 
     32/ 
     33!----------------------------------------------------------------------- 
     34&namp5zlim     !   parameters for nutrient limitations PISCES QUOTA - ln_p5z 
     35!----------------------------------------------------------------------- 
     36/ 
     37!----------------------------------------------------------------------- 
     38&namp5zquota    !   parameters for nutrient limitations PISCES quota - ln_p5z 
     39!----------------------------------------------------------------------- 
     40/ 
     41!----------------------------------------------------------------------- 
     42&nampisopt     !   parameters for optics 
     43!----------------------------------------------------------------------- 
     44/  
     45!----------------------------------------------------------------------- 
     46&namp4zprod     !   parameters for phytoplankton growth for PISCES std - ln_p4z 
     47!----------------------------------------------------------------------- 
     48/ 
    449!''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    5 &nampisext     !   air-sea exchange 
     50&namp5zprod     !   parameters for phytoplankton growth for PISCES quota - ln_p5z 
    651!,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    752/ 
    8 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    9 &nampisatm     !  Atmospheric prrssure  
    10 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     53!----------------------------------------------------------------------- 
     54&namp4zmort     !   parameters for phytoplankton sinks for PISCES std - ln_p4z 
     55!----------------------------------------------------------------------- 
    1156/ 
    12 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    13 &nampisbio     !   biological parameters 
    14 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    15    nrdttrc    =  4        ! time step frequency for biology 
     57!----------------------------------------------------------------------- 
     58&namp5zmort     !   parameters for phytoplankton sinks for PISCES quota - ln_p5z 
     59!----------------------------------------------------------------------- 
    1660/ 
    17 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    18 &nampislim     !   parameters for nutrient limitations 
    19 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     61!----------------------------------------------------------------------- 
     62&namp4zmes     !   parameters for mesozooplankton for PISCES std - ln_p4z 
     63!----------------------------------------------------------------------- 
    2064/ 
    21 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    22 &nampisopt     !   parameters for optics 
    23 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    24 /  
    25 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    26 &nampisprod     !   parameters for phytoplankton growth 
    27 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     65!----------------------------------------------------------------------- 
     66&namp5zmes     !   parameters for mesozooplankton 
     67!----------------------------------------------------------------------- 
    2868/ 
    29 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    30 &nampismort     !   parameters for phytoplankton sinks 
    31 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     69!----------------------------------------------------------------------- 
     70&namp4zzoo     !   parameters for microzooplankton for PISCES std - ln_p4z 
     71!----------------------------------------------------------------------- 
    3272/ 
    33 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    34 &nampismes     !   parameters for mesozooplankton 
    35 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     73!----------------------------------------------------------------------- 
     74&namp5zzoo     !   parameters for microzooplankton 
     75!----------------------------------------------------------------------- 
    3676/ 
    37 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    38 &nampiszoo     !   parameters for microzooplankton 
    39 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     77!----------------------------------------------------------------------- 
     78&nampisfer     !   parameters for iron chemistry 
     79!----------------------------------------------------------------------- 
    4080/ 
    41 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    42 &nampisfer     !   parameters for iron chemistry 
    43 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    44  
    45 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     81!-----------------------------------------------------------------------   
    4682&nampisrem     !   parameters for remineralization 
    47 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     83!----------------------------------------------------------------------- 
    4884/ 
    49 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     85!----------------------------------------------------------------------- 
     86&nampispoc     !   parameters for organic particles 
     87!----------------------------------------------------------------------- 
     88/ 
     89!----------------------------------------------------------------------- 
    5090&nampiscal     !   parameters for Calcite chemistry 
    51 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     91!----------------------------------------------------------------------- 
    5292/ 
    53 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     93!----------------------------------------------------------------------- 
    5494&nampissbc     !   parameters for inputs deposition 
    55 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     95!----------------------------------------------------------------------- 
    5696/ 
    57 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     97!----------------------------------------------------------------------- 
     98&nampislig      !  Namelist parameters for ligands, nampislig 
     99!----------------------------------------------------------------------- 
     100/ 
     101!----------------------------------------------------------------------- 
     102&nampisice      !  Prescribed sea ice tracers 
     103!----------------------------------------------------------------------- 
     104/ 
     105!----------------------------------------------------------------------- 
    58106&nampisdmp     !  Damping  
    59 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    60    nn_pisdmp    =  1460       !  Frequency of Relaxation  
     107!----------------------------------------------------------------------- 
     108   nn_pisdmp    =  1460       !  Frequency of Relaxation 
    61109/ 
    62 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     110!----------------------------------------------------------------------- 
    63111&nampismass     !  Mass conservation 
    64 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     112!----------------------------------------------------------------------- 
    65113/ 
     114!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     115!! PISCES reduced (key_pisces_reduced, ex LOBSTER) : namelists 
     116!!              1  - biological parameters for phytoplankton    (namlobphy) 
     117!!              2  - biological parameters for nutrients        (namlobnut) 
     118!!              3  - biological parameters for zooplankton      (namlobzoo)     
     119!!              4  - biological parameters for detritus         (namlobdet) 
     120!!              5  - biological parameters for DOM              (namlobdom) 
     121!!              6  - parameters from aphotic layers to sediment (namlobsed) 
     122!!              7  - general coefficients                       (namlobrat) 
     123!!              8  - optical parameters                         (namlobopt) 
     124!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     125!----------------------------------------------------------------------- 
     126&namlobphy     !   biological parameters for phytoplankton 
     127!----------------------------------------------------------------------- 
     128/ 
     129!----------------------------------------------------------------------- 
     130&namlobnut     !   biological parameters for nutrients 
     131!----------------------------------------------------------------------- 
     132/ 
     133!----------------------------------------------------------------------- 
     134&namlobzoo     !   biological parameters for zooplankton 
     135!----------------------------------------------------------------------- 
     136/ 
     137!----------------------------------------------------------------------- 
     138&namlobdet     !   biological parameters for detritus 
     139!----------------------------------------------------------------------- 
     140/ 
     141!----------------------------------------------------------------------- 
     142&namlobdom     !   biological parameters for DOM 
     143!----------------------------------------------------------------------- 
     144/ 
     145!----------------------------------------------------------------------- 
     146&namlobsed     !   parameters from aphotic layers to sediment 
     147!----------------------------------------------------------------------- 
     148/ 
     149!----------------------------------------------------------------------- 
     150&namlobrat     !   general coefficients 
     151!----------------------------------------------------------------------- 
     152/ 
     153!----------------------------------------------------------------------- 
     154&namlobopt     !   optical parameters 
     155!----------------------------------------------------------------------- 
     156/ 
  • branches/2016/dev_merge_2016/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/EXP00/namelist_top_cfg

    r6140 r7403  
    11!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    2 !! NEMO/TOP1 : ORCA2_OFF_PISCES configuration namelist used to overwrite SHARED/namelist_top 
     2!! NEMO/TOP1 :  Configuration namelist : used to overwrite defaults values defined in SHARED/namelist_top_ref 
    33!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    44!----------------------------------------------------------------------- 
    55&namtrc_run     !   run information 
    66!----------------------------------------------------------------------- 
    7    nn_writetrc   =  1460     !  time step frequency for sn_tracer outputs 
     7   ln_top_euler  = .true. 
    88/ 
    99!----------------------------------------------------------------------- 
    1010&namtrc     !   tracers definition 
    1111!----------------------------------------------------------------------- 
     12   jp_bgc        =  24 
    1213! 
    13 !              !    name   !           title of the field              !   units    ! initial data ! save   ! 
    14 !              !           !                                           !            ! from file    ! or not !  
    15 !              !           !                                           !            ! or not       !        ! 
    16    sn_tracer(1)   = 'DIC     ' , 'Dissolved inorganic Concentration      ',  'mol-C/L' ,  .true.     ,  .true. 
    17    sn_tracer(2)   = 'Alkalini' , 'Total Alkalinity Concentration         ',  'eq/L '   ,  .true.     ,  .true. 
    18    sn_tracer(3)   = 'O2      ' , 'Dissolved Oxygen Concentration         ',  'mol-C/L' ,  .true.     ,  .true. 
    19    sn_tracer(4)   = 'CaCO3   ' , 'Calcite Concentration                  ',  'mol-C/L' ,  .false.    ,  .true. 
    20    sn_tracer(5)   = 'PO4     ' , 'Phosphate Concentration                ',  'mol-C/L' ,  .true.     ,  .true. 
    21    sn_tracer(6)   = 'POC     ' , 'Small organic carbon Concentration     ',  'mol-C/L' ,  .false.    ,  .true. 
    22    sn_tracer(7)   = 'Si      ' , 'Silicate Concentration                 ',  'mol-C/L' ,  .true.     ,  .true. 
    23    sn_tracer(8)   = 'PHY     ' , 'Nanophytoplankton Concentration        ',  'mol-C/L' ,  .false.    ,  .true. 
    24    sn_tracer(9)   = 'ZOO     ' , 'Microzooplankton Concentration         ',  'mol-C/L' ,  .false.    ,  .true. 
    25    sn_tracer(10)  = 'DOC     ' , 'Dissolved organic Concentration        ',  'mol-C/L' ,  .false.    ,  .true. 
    26    sn_tracer(11)  = 'PHY2    ' , 'Diatoms Concentration                  ',  'mol-C/L' ,  .false.    ,  .true. 
    27    sn_tracer(12)  = 'ZOO2    ' , 'Mesozooplankton Concentration          ',  'mol-C/L' ,  .false.    ,  .true. 
    28    sn_tracer(13)  = 'DSi     ' , 'Diatoms Silicate Concentration         ',  'mol-C/L' ,  .false.    ,  .true. 
    29    sn_tracer(14)  = 'Fer     ' , 'Dissolved Iron Concentration           ',  'mol-C/L' ,  .true.     ,  .true. 
    30    sn_tracer(15)  = 'BFe     ' , 'Big iron particles Concentration       ',  'mol-C/L' ,  .false.    ,  .true. 
    31    sn_tracer(16)  = 'GOC     ' , 'Big organic carbon Concentration       ',  'mol-C/L' ,  .false.    ,  .true. 
    32    sn_tracer(17)  = 'SFe     ' , 'Small iron particles Concentration     ',  'mol-C/L' ,  .false.    ,  .true. 
    33    sn_tracer(18)  = 'DFe     ' , 'Diatoms iron  Concentration            ',  'mol-C/L' ,  .false.    ,  .true. 
    34    sn_tracer(19)  = 'GSi     ' , 'Sinking biogenic Silicate Concentration',  'mol-C/L' ,  .false.    ,  .true. 
    35    sn_tracer(20)  = 'NFe     ' , 'Nano iron Concentration                ',  'mol-C/L' ,  .false.    ,  .true. 
    36    sn_tracer(21)  = 'NCHL    ' , 'Nano chlorophyl Concentration          ',  'mol-C/L' ,  .false.    ,  .true. 
    37    sn_tracer(22)  = 'DCHL    ' , 'Diatoms chlorophyl Concentration       ',  'mol-C/L' ,  .false.    ,  .true. 
    38    sn_tracer(23)  = 'NO3     ' , 'Nitrates Concentration                 ',  'mol-C/L' ,  .true.     ,  .true. 
    39    sn_tracer(24)  = 'NH4     ' , 'Ammonium Concentration                 ',  'mol-C/L' ,  .false.    ,  .true. 
     14   ln_pisces     =  .true. 
     15   ln_my_trc     =  .false. 
     16   ln_age        =  .false. 
     17   ln_cfc11      =  .false. 
     18   ln_cfc12      =  .false. 
     19   ln_c14        =  .false. 
     20! 
     21   ln_trcdta     =  .true.  !  Initialisation from data input file (T) or not (F) 
     22!                 !           !                                          !             ! 
     23!                 !    name   !           title of the field             !   units     ! initial data from file or not ! 
     24!                 !           !                                          !             ! 
     25   sn_tracer(1)   = 'DIC     ' , 'Dissolved inorganic Concentration      ',  'mol-C/L' ,  .true. 
     26   sn_tracer(2)   = 'Alkalini' , 'Total Alkalinity Concentration         ',  'eq/L '   ,  .true. 
     27   sn_tracer(3)   = 'O2      ' , 'Dissolved Oxygen Concentration         ',  'mol-C/L' ,  .true. 
     28   sn_tracer(4)   = 'CaCO3   ' , 'Calcite Concentration                  ',  'mol-C/L' ,  .false. 
     29   sn_tracer(5)   = 'PO4     ' , 'Phosphate Concentration                ',  'mol-C/L' ,  .true. 
     30   sn_tracer(6)   = 'POC     ' , 'Small organic carbon Concentration     ',  'mol-C/L' ,  .false. 
     31   sn_tracer(7)   = 'Si      ' , 'Silicate Concentration                 ',  'mol-C/L' ,  .true. 
     32   sn_tracer(8)   = 'PHY     ' , 'Nanophytoplankton Concentration        ',  'mol-C/L' ,  .false. 
     33   sn_tracer(9)   = 'ZOO     ' , 'Microzooplankton Concentration         ',  'mol-C/L' ,  .false. 
     34   sn_tracer(10)  = 'DOC     ' , 'Dissolved organic Concentration        ',  'mol-C/L' ,  .true. 
     35   sn_tracer(11)  = 'PHY2    ' , 'Diatoms Concentration                  ',  'mol-C/L' ,  .false. 
     36   sn_tracer(12)  = 'ZOO2    ' , 'Mesozooplankton Concentration          ',  'mol-C/L' ,  .false. 
     37   sn_tracer(13)  = 'DSi     ' , 'Diatoms Silicate Concentration         ',  'mol-C/L' ,  .false. 
     38   sn_tracer(14)  = 'Fer     ' , 'Dissolved Iron Concentration           ',  'mol-C/L' ,  .true. 
     39   sn_tracer(15)  = 'BFe     ' , 'Big iron particles Concentration       ',  'mol-C/L' ,  .false. 
     40   sn_tracer(16)  = 'GOC     ' , 'Big organic carbon Concentration       ',  'mol-C/L' ,  .false. 
     41   sn_tracer(17)  = 'SFe     ' , 'Small iron particles Concentration     ',  'mol-C/L' ,  .false. 
     42   sn_tracer(18)  = 'DFe     ' , 'Diatoms iron  Concentration            ',  'mol-C/L' ,  .false. 
     43   sn_tracer(19)  = 'GSi     ' , 'Sinking biogenic Silicate Concentration',  'mol-C/L' ,  .false. 
     44   sn_tracer(20)  = 'NFe     ' , 'Nano iron Concentration                ',  'mol-C/L' ,  .false. 
     45   sn_tracer(21)  = 'NCHL    ' , 'Nano chlorophyl Concentration          ',  'mol-C/L' ,  .false. 
     46   sn_tracer(22)  = 'DCHL    ' , 'Diatoms chlorophyl Concentration       ',  'mol-C/L' ,  .false. 
     47   sn_tracer(23)  = 'NO3     ' , 'Nitrates Concentration                 ',  'mol-C/L' ,  .true. 
     48   sn_tracer(24)  = 'NH4     ' , 'Ammonium Concentration                 ',  'mol-C/L' ,  .false. 
    4049/ 
    4150!----------------------------------------------------------------------- 
    4251&namtrc_dta      !    Initialisation from data input file 
    4352!----------------------------------------------------------------------- 
    44 ! 
    4553!          !  file name  ! frequency (hours) ! variable  ! time interp. !  clim  ! 'yearly'/ ! weights  ! rotation ! land/sea mask ! 
    4654!          !             !  (if <0  months)  !   name    !   (logical)  !  (T/F) ! 'monthly' ! filename ! pairing  ! filename      ! 
    47    sn_trcdta(1)  = 'data_DIC_nomask'        ,        -12        ,  'DIC'     ,    .false.   , .true. , 'yearly'  , ''       , ''  , '' 
    48    sn_trcdta(2)  = 'data_Alkalini_nomask'   ,        -12        ,  'Alkalini',    .false.   , .true. , 'yearly'  , ''       , ''  , '' 
    49    sn_trcdta(3)  = 'data_O2_nomask'      ,        -1         ,  'O2'      ,    .true.    , .true. , 'yearly'  , ''       , ''  , '' 
    50    sn_trcdta(5)  = 'data_PO4_nomask'     ,        -1         ,  'PO4'     ,    .true.    , .true. , 'yearly'  , ''       , ''  , '' 
    51    sn_trcdta(7)  = 'data_Si_nomask'      ,        -1         ,  'Si'      ,    .true.    , .true. , 'yearly'  , ''       , ''  , '' 
    52    sn_trcdta(14) = 'data_Fer_nomask'        ,        -12        ,  'Fer'     ,    .false.   , .true. , 'yearly'  , ''       , ''  , '' 
    53    sn_trcdta(23) = 'data_NO3_nomask'     ,        -1         ,  'NO3'     ,    .true.    , .true. , 'yearly'  , ''       , ''  , '' 
    54 ! 
    55    cn_dir        =  './'      !  root directory for the location of the data files 
     55   sn_trcdta(1)  = 'data_DIC_nomask'        ,        -12        ,  'DIC'     ,    .false.   , .true. , 'yearly'  , ''       , ''   , '' 
     56   sn_trcdta(2)  = 'data_Alkalini_nomask'   ,        -12        ,  'Alkalini',    .false.   , .true. , 'yearly'  , ''       , ''   , '' 
     57   sn_trcdta(3)  = 'data_O2_nomask'         ,        -1         ,  'O2'      ,    .true.    , .true. , 'yearly'  , ''       , ''   , '' 
     58   sn_trcdta(5)  = 'data_PO4_nomask'        ,        -1         ,  'PO4'     ,    .true.    , .true. , 'yearly'  , ''       , ''   , '' 
     59   sn_trcdta(7)  = 'data_Si_nomask'         ,        -1         ,  'Si'      ,    .true.    , .true. , 'yearly'  , ''       , ''   , '' 
     60   sn_trcdta(10) = 'data_DOC_nomask'        ,        -12        ,  'DOC'     ,    .false.   , .true. , 'yearly'  , ''       , ''   , '' 
     61   sn_trcdta(14) = 'data_Fer_nomask'        ,        -12        ,  'Fer'     ,    .false.   , .true. , 'yearly'  , ''       , ''   , '' 
     62   sn_trcdta(23) = 'data_NO3_nomask'        ,        -1         ,  'NO3'     ,    .true.    , .true. , 'yearly'  , ''       , ''   , '' 
    5663   rn_trfac(1)   =   1.0e-06  !  multiplicative factor 
    5764   rn_trfac(2)   =   1.0e-06  !  -      -      -     - 
     
    5966   rn_trfac(5)   = 122.0e-06  !  -      -      -     - 
    6067   rn_trfac(7)   =   1.0e-06  !  -      -      -     - 
     68   rn_trfac(10)  =   1.0      !  -      -      -     - 
    6169   rn_trfac(14)  =   1.0      !  -      -      -     - 
    6270   rn_trfac(23)  =   7.6e-06  !  -      -      -     - 
     
    8189/ 
    8290!----------------------------------------------------------------------- 
    83 &namtrc_dia       !   parameters for passive tracer additional diagnostics 
     91&namtrc_dmp      !   passive tracer newtonian damping 
     92!----------------------------------------------------------------------- 
     93/ 
     94!----------------------------------------------------------------------- 
     95&namtrc_ice      !    Representation of sea ice growth & melt effects 
     96!----------------------------------------------------------------------- 
     97/ 
     98!----------------------------------------------------------------------- 
     99&namtrc_trd      !   diagnostics on tracer trends                       ('key_trdtrc') 
     100!                          or mixed-layer trends                        ('key_trdmld_trc') 
    84101!---------------------------------------------------------------------- 
    85    nn_writedia   =  1460     !  time step frequency for diagnostics 
    86102/ 
    87103!---------------------------------------------------------------------- 
    88 &namtrc_bc        !   data for boundary conditions 
     104&namtrc_bc       !   data for boundary conditions 
    89105!----------------------------------------------------------------------- 
    90106/ 
     107!---------------------------------------------------------------------- 
     108&namtrc_bdy      !   Setup of tracer boundary conditions 
     109!----------------------------------------------------------------------- 
  • branches/2016/dev_merge_2016/NEMOGCM/CONFIG/ORCA2_OFF_PISCES/cpp_ORCA2_OFF_PISCES.fcm

    r5836 r7403  
    1 bld::tool::fppkeys key_trabbl key_top key_offline key_pisces key_iomput key_mpp_mpi 
     1bld::tool::fppkeys key_trabbl key_top key_offline key_iomput key_mpp_mpi 
  • branches/2016/dev_merge_2016/NEMOGCM/CONFIG/SHARED/field_def.xml

    r6472 r7403  
    4141         <field id="sstgrad2"     long_name="square of module of sst gradient"                                                        unit="degC2/m2" /> 
    4242         <field id="sbt"          long_name="sea bottom temperature"                                                                  unit="degC"     /> 
     43         <field id="tosmint"      long_name="vertical integral of temperature times density"   standard_name="integral_wrt_depth_of_product_of_density_and_potential_temperature"  unit="(kg m2) degree_C" /> 
    4344         <field id="sst_wl"       long_name="Delta SST of warm layer"                                                                 unit="degC"     /> 
    4445         <field id="sst_cs"       long_name="Delta SST of cool skin"                                                                  unit="degC"     /> 
     
    4950         <field id="sssmax"       long_name="max of sea surface salinity"   field_ref="sss"   operation="maximum"                 /> 
    5051         <field id="sssmin"       long_name="min of sea surface salinity"   field_ref="sss"   operation="minimum"                 /> 
    51          <field id="sbs"          long_name="sea bottom salinity"                                                     unit="1e-3" /> 
     52         <field id="sbs"          long_name="sea bottom salinity"                                                     unit="0.001" /> 
     53         <field id="somint"       long_name="vertical integral of salinity times density"   standard_name="integral_wrt_depth_of_product_of_density_and_salinity"  unit="(kg m2) x (1e-3)" />  
    5254 
    5355         <field id="taubot"       long_name="bottom stress module"                                                    unit="N/m2" />  
     
    9395 
    9496         <!-- variables available with key_diaar5 --> 
    95          <field id="botpres"      long_name="Pressure at sea floor"   standard_name="sea_water_pressure_at_sea_floor"   unit="dbar" /> 
     97         <field id="botpres"      long_name="Sea Water Pressure at Sea Floor"   standard_name="sea_water_pressure_at_sea_floor"   unit="dbar" /> 
     98         <field id="sshdyn"       long_name="dynamic sea surface height"     standard_name="dynamic_sea_surface_height_above_geoid"     unit="m" /> 
     99         <field id="sshdyn2"      long_name="square of dynamic sea surface height"     standard_name="dynamic_sea_surface_height_above_geoid_squared"     unit="m2" > sshdyn * sshdyn </field> 
     100         <field id="tnpeo"      long_name="Tendency of ocean potential energy content"          unit="W/m2"                           /> 
    96101 
    97102         <!-- variables available with key_vvl --> 
     
    205210         <!-- * variable related to ice shelf forcing * --> 
    206211         <field id="fwfisf"       long_name="Ice shelf melting"                                            unit="Kg/m2/s"  /> 
    207          <field id="qisf"         long_name="Ice Shelf Heat Flux"                                          unit="W/m2"     /> 
     212         <field id="fwfisf3d"     long_name="Ice shelf melting"                             unit="kg/m2/s"  grid_ref="grid_T_3D" /> 
     213         <field id="qlatisf"      long_name="Ice shelf latent heat flux"                    unit="W/m2"     /> 
     214         <field id="qlatisf3d"    long_name="Ice shelf latent heat flux"                    unit="W/m2"     grid_ref="grid_T_3D" /> 
     215         <field id="qhcisf"       long_name="Ice shelf heat content flux"                   unit="W/m2"     /> 
     216         <field id="qhcisf3d"     long_name="Ice shelf heat content flux"                   unit="W/m2"     grid_ref="grid_T_3D" /> 
    208217         <field id="isfgammat"    long_name="transfert coefficient for isf (temperature) "                 unit="m/s"      /> 
    209218         <field id="isfgammas"    long_name="transfert coefficient for isf (salinity)    "                 unit="m/s"      /> 
     
    418427         <field id="utbl"         long_name="zonal current in the Losh tbl"     unit="m/s" /> 
    419428 
    420          <!-- variables available with key_diaar5 --> 
    421          <field id="u_masstr"     long_name="ocean eulerian mass transport along i-axis"    standard_name="ocean_mass_x_transport"                          unit="kg/s"        grid_ref="grid_U_3D" /> 
     429         <field id="u_masstr"     long_name="Ocean Mass X Transport"    standard_name="ocean_mass_x_transport"                          unit="kg/s"        grid_ref="grid_U_3D" /> 
     430         <field id="u_masstr_vint" long_name="vertical integral of ocean eulerian mass transport along i-axis"    standard_name="vertical_integral_of_ocean_mass_x_transport"  unit="kg/s" /> 
    422431         <field id="u_heattr"     long_name="ocean eulerian heat transport along i-axis"    standard_name="ocean_heat_x_transport"                          unit="W"                                /> 
    423432         <field id="u_salttr"     long_name="ocean eulerian salt transport along i-axis"    standard_name="ocean_salt_x_transport"                          unit="1e-3*kg/s"                        /> 
     433         <field id="uadv_heattr"  long_name="ocean advective heat transport along i-axis"    standard_name="advectice_ocean_heat_x_transport"               unit="W"                                /> 
     434         <field id="uadv_salttr"  long_name="ocean advective salt transport along i-axis"    standard_name="advectice_ocean_salt_x_transport"               unit="1e-3*kg/s"                      /> 
    424435         <field id="ueiv_heattr"  long_name="ocean bolus heat transport along i-axis"       standard_name="ocean_heat_x_transport_due_to_bolus_advection"   unit="W"                                /> 
     436         <field id="ueiv_salttr"  long_name="ocean bolus salt transport along i-axis"       standard_name="ocean_salt_x_transport_due_to_bolus_advection"   unit="Kg"                                /> 
     437         <field id="ueiv_heattr3d" long_name="ocean bolus heat transport along i-axis"    standard_name="ocean_heat_x_transport_due_to_bolus_advection"   unit="W"    grid_ref="grid_U_3D" /> 
     438         <field id="ueiv_salttr3d" long_name="ocean bolus salt transport along i-axis"    standard_name="ocean_salt_x_transport_due_to_bolus_advection"   unit="kg"   grid_ref="grid_U_3D" /> 
    425439         <field id="udiff_heattr" long_name="ocean diffusion heat transport along i-axis"   standard_name="ocean_heat_x_transport_due_to_diffusion"         unit="W"                                /> 
     440         <field id="udiff_salttr" long_name="ocean diffusion salt transport along i-axis"   standard_name="ocean_salt_x_transport_due_to_diffusion"         unit="1e-3*kg/s"                                /> 
    426441      </field_group> 
    427442       
     
    464479         <field id="v_heattr"     long_name="ocean eulerian heat transport along j-axis"    standard_name="ocean_heat_y_transport"                          unit="W"                                /> 
    465480         <field id="v_salttr"     long_name="ocean eulerian salt transport along i-axis"    standard_name="ocean_salt_y_transport"                          unit="1e-3*kg/s"                        /> 
     481         <field id="vadv_heattr"  long_name="ocean advective heat transport along j-axis"   standard_name="advectice_ocean_heat_y_transport"                unit="W"                      /> 
     482         <field id="vadv_salttr"  long_name="ocean advective salt transport along j-axis"   standard_name="advectice_ocean_salt_y_transport"                unit="1e-3*kg/s"              /> 
    466483         <field id="veiv_heattr"  long_name="ocean bolus heat transport along j-axis"       standard_name="ocean_heat_y_transport_due_to_bolus_advection"   unit="W"                                /> 
     484         <field id="veiv_salttr"  long_name="ocean bolus salt transport along j-axis"       standard_name="ocean_salt_x_transport_due_to_bolus_advection"   unit="Kg"                                /> 
     485         <field id="veiv_heattr3d" long_name="ocean bolus heat transport along j-axis"    standard_name="ocean_heat_y_transport_due_to_bolus_advection"   unit="W"    grid_ref="grid_V_3D" /> 
     486         <field id="veiv_salttr3d" long_name="ocean bolus salt transport along j-axis"    standard_name="ocean_salt_y_transport_due_to_bolus_advection"   unit="kg"   grid_ref="grid_V_3D" /> 
    467487         <field id="vdiff_heattr" long_name="ocean diffusion heat transport along j-axis"   standard_name="ocean_heat_y_transport_due_to_diffusion"         unit="W"                                /> 
     488         <field id="vdiff_salttr" long_name="ocean diffusion salt transport along j-axis"   standard_name="ocean_salt_y_transport_due_to_diffusion"         unit="1e-3*kg/s"                        /> 
    468489      </field_group> 
    469490       
     
    625646 
    626647      <!-- Poleward transport : ptr -->      
    627       <field_group id="diaptr" domain_ref="ptr" >  
     648      <field_group id="diaptr" domain_ref="ptr" >   
    628649        <field id="zomsfglo"          long_name="Meridional Stream-Function: Global"           unit="Sv"       grid_ref="gznl_W_3D" /> 
    629650        <field id="zomsfatl"          long_name="Meridional Stream-Function: Atlantic"         unit="Sv"       grid_ref="gznl_W_3D" /> 
     
    631652        <field id="zomsfind"          long_name="Meridional Stream-Function: Indian"           unit="Sv"       grid_ref="gznl_W_3D" /> 
    632653        <field id="zomsfipc"          long_name="Meridional Stream-Function: Pacific+Indian"   unit="Sv"       grid_ref="gznl_W_3D" /> 
    633         <field id="zotemglo"          long_name="Zonal Mean Temperature : Global"              unit="degC"     grid_ref="gznl_T_3D" /> 
    634         <field id="zotematl"          long_name="Zonal Mean Temperature : Atlantic"            unit="degC"     grid_ref="gznl_T_3D" /> 
    635         <field id="zotempac"          long_name="Zonal Mean Temperature : Pacific"             unit="degC"     grid_ref="gznl_T_3D" /> 
    636         <field id="zotemind"          long_name="Zonal Mean Temperature : Indian"              unit="degC"     grid_ref="gznl_T_3D" /> 
    637         <field id="zotemipc"          long_name="Zonal Mean Temperature : Pacific+Indian"      unit="degC"     grid_ref="gznl_T_3D" /> 
    638         <field id="zosalglo"          long_name="Zonal Mean Salinity : Global"                 unit="1e-3"     grid_ref="gznl_T_3D" /> 
    639         <field id="zosalatl"          long_name="Zonal Mean Salinity : Atlantic"               unit="1e-3"     grid_ref="gznl_T_3D" /> 
    640         <field id="zosalpac"          long_name="Zonal Mean Salinity : Pacific"                unit="1e-3"     grid_ref="gznl_T_3D" /> 
    641         <field id="zosalind"          long_name="Zonal Mean Salinity : Indian"                 unit="1e-3"     grid_ref="gznl_T_3D" /> 
    642         <field id="zosalipc"          long_name="Zonal Mean Salinity : Pacific+Indian"         unit="1e-3"     grid_ref="gznl_T_3D" /> 
     654        <field id="zotemglo"          long_name="Zonal Mean Temperature : Global"              unit="degree_C"     grid_ref="gznl_T_3D" /> 
     655        <field id="zotematl"          long_name="Zonal Mean Temperature : Atlantic"            unit="degree_C"     grid_ref="gznl_T_3D" /> 
     656        <field id="zotempac"          long_name="Zonal Mean Temperature : Pacific"             unit="degree_C"     grid_ref="gznl_T_3D" /> 
     657        <field id="zotemind"          long_name="Zonal Mean Temperature : Indian"              unit="degree_C"     grid_ref="gznl_T_3D" /> 
     658        <field id="zotemipc"          long_name="Zonal Mean Temperature : Pacific+Indian"      unit="degree_C"     grid_ref="gznl_T_3D" /> 
     659        <field id="zosalglo"          long_name="Zonal Mean Salinity : Global"                 unit="0.001"     grid_ref="gznl_T_3D" /> 
     660        <field id="zosalatl"          long_name="Zonal Mean Salinity : Atlantic"               unit="0.001"     grid_ref="gznl_T_3D" /> 
     661        <field id="zosalpac"          long_name="Zonal Mean Salinity : Pacific"                unit="0.001"     grid_ref="gznl_T_3D" /> 
     662        <field id="zosalind"          long_name="Zonal Mean Salinity : Indian"                 unit="0.001"     grid_ref="gznl_T_3D" /> 
     663        <field id="zosalipc"          long_name="Zonal Mean Salinity : Pacific+Indian"         unit="0.001"     grid_ref="gznl_T_3D" /> 
    643664        <field id="zosrfglo"          long_name="Zonal Mean Surface"                           unit="m2"       grid_ref="gznl_T_3D" /> 
    644665        <field id="zosrfatl"          long_name="Zonal Mean Surface : Atlantic"                unit="m2"       grid_ref="gznl_T_3D" /> 
     
    647668        <field id="zosrfipc"          long_name="Zonal Mean Surface : Pacific+Indian"          unit="m2"       grid_ref="gznl_T_3D" /> 
    648669        <field id="sophtadv"          long_name="Advective Heat Transport"                     unit="PW"       grid_ref="gznl_T_2D" /> 
     670        <field id="sophtadv_atl"      long_name="Advective Heat Transport: Atlantic"           unit="PW"       grid_ref="gznl_T_2D" /> 
     671        <field id="sophtadv_pac"      long_name="Advective Heat Transport: Pacific"            unit="PW"       grid_ref="gznl_T_2D" /> 
     672        <field id="sophtadv_ind"      long_name="Advective Heat Transport: Indian"             unit="PW"       grid_ref="gznl_T_2D" /> 
     673        <field id="sophtadv_ipc"      long_name="Advective Heat Transport: Pacific+Indian"     unit="PW"       grid_ref="gznl_T_2D" /> 
    649674        <field id="sophtldf"          long_name="Diffusive Heat Transport"                     unit="PW"       grid_ref="gznl_T_2D" /> 
     675        <field id="sophtldf_atl"      long_name="Diffusive Heat Transport: Atlantic"           unit="PW"       grid_ref="gznl_T_2D" /> 
     676        <field id="sophtldf_pac"      long_name="Diffusive Heat Transport: Pacific"            unit="PW"       grid_ref="gznl_T_2D" /> 
     677        <field id="sophtldf_ind"      long_name="Diffusive Heat Transport: Indian"             unit="PW"       grid_ref="gznl_T_2D" /> 
     678        <field id="sophtldf_ipc"      long_name="Diffusive Heat Transport: Pacific+Indian"     unit="PW"       grid_ref="gznl_T_2D" /> 
     679        <field id="sophtove"          long_name="Overturning Heat Transport"                     unit="PW"       grid_ref="gznl_T_2D" /> 
     680        <field id="sophtove_atl"      long_name="Overturning Heat Transport: Atlantic"           unit="PW"       grid_ref="gznl_T_2D" /> 
     681        <field id="sophtove_pac"      long_name="Overturning Heat Transport: Pacific"            unit="PW"       grid_ref="gznl_T_2D" /> 
     682        <field id="sophtove_ind"      long_name="Overturning Heat Transport: Indian"             unit="PW"       grid_ref="gznl_T_2D" /> 
     683        <field id="sophtove_ipc"      long_name="Overturning Heat Transport: Pacific+Indian"     unit="PW"       grid_ref="gznl_T_2D" /> 
     684        <field id="sophtbtr"          long_name="Barotropic Heat Transport"                     unit="PW"       grid_ref="gznl_T_2D" /> 
     685        <field id="sophtbtr_atl"      long_name="Barotropic Heat Transport: Atlantic"           unit="PW"       grid_ref="gznl_T_2D" /> 
     686        <field id="sophtbtr_pac"      long_name="Barotropic Heat Transport: Pacific"            unit="PW"       grid_ref="gznl_T_2D" /> 
     687        <field id="sophtbtr_ind"      long_name="Barotropic Heat Transport: Indian"             unit="PW"       grid_ref="gznl_T_2D" /> 
     688        <field id="sophtbtr_ipc"      long_name="Barotropic Heat Transport: Pacific+Indian"     unit="PW"       grid_ref="gznl_T_2D" /> 
     689        <field id="sophteiv"          long_name="Heat Transport from mesoscale eddy advection"                     unit="PW"       grid_ref="gznl_T_2D" /> 
     690        <field id="sophteiv_atl"      long_name="Heat Transport from mesoscale eddy advection: Atlantic"           unit="PW"       grid_ref="gznl_T_2D" /> 
     691        <field id="sophteiv_pac"      long_name="Heat Transport from mesoscale eddy advection: Pacific"            unit="PW"       grid_ref="gznl_T_2D" /> 
     692        <field id="sophteiv_ind"      long_name="Heat Transport from mesoscale eddy advection: Indian"             unit="PW"       grid_ref="gznl_T_2D" /> 
     693        <field id="sophteiv_ipc"      long_name="Heat Transport from mesoscale eddy advection: Pacific+Indian"     unit="PW"       grid_ref="gznl_T_2D" /> 
    650694        <field id="sopstadv"          long_name="Advective Salt Transport"                     unit="Giga g/s" grid_ref="gznl_T_2D" /> 
     695        <field id="sopstadv_atl"      long_name="Advective Salt Transport: Atlantic"           unit="Giga g/s" grid_ref="gznl_T_2D" /> 
     696        <field id="sopstadv_pac"      long_name="Advective Salt Transport: Pacific"            unit="Giga g/s" grid_ref="gznl_T_2D" /> 
     697        <field id="sopstadv_ind"      long_name="Advective Salt Transport: Indian"             unit="Giga g/s" grid_ref="gznl_T_2D" /> 
     698        <field id="sopstadv_ipc"      long_name="Advective Salt Transport: Pacific+Indian"     unit="Giga g/s" grid_ref="gznl_T_2D" /> 
     699        <field id="sopstove"          long_name="Overturning Salt Transport"                     unit="Giga g/s" grid_ref="gznl_T_2D" /> 
     700        <field id="sopstove_atl"      long_name="Overturning Salt Transport: Atlantic"           unit="Giga g/s" grid_ref="gznl_T_2D" /> 
     701        <field id="sopstove_pac"      long_name="Overturning Salt Transport: Pacific"            unit="Giga g/s" grid_ref="gznl_T_2D" /> 
     702        <field id="sopstove_ind"      long_name="Overturning Salt Transport: Indian"             unit="Giga g/s" grid_ref="gznl_T_2D" /> 
     703        <field id="sopstove_ipc"      long_name="Overturning Salt Transport: Pacific+Indian"     unit="Giga g/s" grid_ref="gznl_T_2D" /> 
     704        <field id="sopstbtr"          long_name="Barotropic Salt Transport"                     unit="Giga g/s" grid_ref="gznl_T_2D" /> 
     705        <field id="sopstbtr_atl"      long_name="Barotropic Salt Transport: Atlantic"           unit="Giga g/s" grid_ref="gznl_T_2D" /> 
     706        <field id="sopstbtr_pac"      long_name="Barotropic Salt Transport: Pacific"            unit="Giga g/s" grid_ref="gznl_T_2D" /> 
     707        <field id="sopstbtr_ind"      long_name="Barotropic Salt Transport: Indian"             unit="Giga g/s" grid_ref="gznl_T_2D" /> 
     708        <field id="sopstbtr_ipc"      long_name="Barotropic Salt Transport: Pacific+Indian"     unit="Giga g/s" grid_ref="gznl_T_2D" /> 
    651709        <field id="sopstldf"          long_name="Diffusive Salt Transport"                     unit="Giga g/s" grid_ref="gznl_T_2D" /> 
     710        <field id="sopstldf_atl"      long_name="Diffusive Salt Transport: Atlantic"           unit="Giga g/s" grid_ref="gznl_T_2D" /> 
     711        <field id="sopstldf_pac"      long_name="Diffusive Salt Transport: Pacific"            unit="Giga g/s" grid_ref="gznl_T_2D" /> 
     712        <field id="sopstldf_ind"      long_name="Diffusive Salt Transport: Indian"             unit="Giga g/s" grid_ref="gznl_T_2D" /> 
     713        <field id="sopstldf_ipc"      long_name="Diffusive Salt Transport: Pacific+Indian"     unit="Giga g/s" grid_ref="gznl_T_2D" /> 
     714        <field id="sopsteiv"          long_name="Salt Transport from mesoscale eddy advection"                     unit="Giga g/s"       grid_ref="gznl_T_2D" /> 
     715        <field id="sopsteiv_atl"      long_name="Salt Transport from mesoscale eddy advection: Atlantic"           unit="Giga g/s"       grid_ref="gznl_T_2D" /> 
     716        <field id="sopsteiv_pac"      long_name="Salt Transport from mesoscale eddy advection: Pacific"            unit="Giga g/s"       grid_ref="gznl_T_2D" /> 
     717        <field id="sopsteiv_ind"      long_name="Salt Transport from mesoscale eddy advection: Indian"             unit="Giga g/s"       grid_ref="gznl_T_2D" /> 
     718        <field id="sopsteiv_ipc"      long_name="Salt Transport from mesoscale eddy advection: Pacific+Indian"     unit="Giga g/s"       grid_ref="gznl_T_2D" />        
    652719      </field_group> 
    653720 
     
    668735      <field id="ttrd_ad"       long_name="temperature-trend: advection"               standard_name="tendency_of_sea_water_temperature_due_to_advection"           unit="degC/s"                         > sqrt( ttrd_xad^2 + ttrd_yad^2 + ttrd_zad^2 ) </field> 
    669736      <field id="strd_ad"       long_name="salinity   -trend: advection"               standard_name="tendency_of_sea_water_salinity_due_to_advection"              unit="1e-3/s"                         > sqrt( strd_xad^2 + strd_yad^2 + strd_zad^2 ) </field> 
     737      <field id="ttrd_totad"    long_name="temperature-trend: total advection"         standard_name="tendency_of_sea_water_salinity_due_to_advection"              unit="degC/s"                        /> 
     738      <field id="strd_totad"    long_name="salinity   -trend: total advection"         standard_name="tendency_of_sea_water_salinity_due_to_advection"              unit="1e-3/s"                        /> 
    670739      <field id="ttrd_sad"      long_name="temperature-trend: surface adv. (no-vvl)"                                                                                unit="degC/s"   grid_ref="grid_T_2D" /> 
    671740      <field id="strd_sad"      long_name="salinity   -trend: surface adv. (no-vvl)"                                                                                unit="1e-3/s"   grid_ref="grid_T_2D" /> 
     
    674743      <field id="ttrd_zdf"      long_name="temperature-trend: vertical diffusion"      standard_name="tendency_of_sea_water_temperature_due_to_vertical_mixing"     unit="degC/s"                        /> 
    675744      <field id="strd_zdf"      long_name="salinity   -trend: vertical diffusion"      standard_name="tendency_of_sea_water_salinity_due_to_vertical_mixing"        unit="1e-3/s"                        /> 
     745      <field id="ttrd_evd"      long_name="temperature-trend: EVD convection"                                                                                       unit="degC/s"                        /> 
     746      <field id="strd_evd"      long_name="salinity   -trend: EVD convection"                                                                                       unit="1e-3/s"                        /> 
    676747 
    677748      <!-- ln_traldf_iso=T only (iso-neutral diffusion) --> 
     749      <field id="ttrd_iso"      long_name="temperature-trend: isopycnal diffusion"                             unit="degC/s" > ttrd_ldf + ttrd_zdf - ttrd_zdfp </field> 
     750      <field id="strd_iso"      long_name="salinity   -trend: isopycnal diffusion"                             unit="1e-3/s" > strd_ldf + strd_zdf - strd_zdfp </field> 
    678751      <field id="ttrd_zdfp"     long_name="temperature-trend: pure vert. diffusion"   unit="degC/s" /> 
    679752      <field id="strd_zdfp"     long_name="salinity   -trend: pure vert. diffusion"   unit="1e-3/s" /> 
     
    692765      <field id="ttrd_atf"      long_name="temperature-trend: asselin time filter"       unit="degC/s" /> 
    693766      <field id="strd_atf"      long_name="salinity   -trend: asselin time filter"       unit="1e-3/s" /> 
     767      <field id="ttrd_tot"      long_name="temperature-trend: total model trend"         unit="degC/s" /> 
     768      <field id="strd_tot"      long_name="salinity   -trend: total model trend"         unit="1e-3/s" /> 
     769 
     770      <!-- Thickness weighted versions: --> 
     771      <field id="ttrd_xad_e3t"      unit="degC/s * m" >  ttrd_xad * e3t </field> 
     772      <field id="strd_xad_e3t"      unit="1e-3/s * m" >  strd_xad * e3t </field> 
     773      <field id="ttrd_yad_e3t"      unit="degC/s * m" >  ttrd_yad * e3t </field> 
     774      <field id="strd_yad_e3t"      unit="1e-3/s * m" >  strd_yad * e3t </field> 
     775      <field id="ttrd_zad_e3t"      unit="degC/s * m" >  ttrd_zad * e3t </field> 
     776      <field id="strd_zad_e3t"      unit="1e-3/s * m" >  strd_zad * e3t </field> 
     777      <field id="ttrd_ad_e3t"       unit="degC/s * m" >  ttrd_ad  * e3t </field> 
     778      <field id="strd_ad_e3t"       unit="1e-3/s * m" >  strd_ad  * e3t </field> 
     779      <field id="ttrd_totad_e3t"    unit="degC/s * m" >  ttrd_totad  * e3t </field> 
     780      <field id="strd_totad_e3t"    unit="1e-3/s * m" >  strd_totad  * e3t </field> 
     781      <field id="ttrd_ldf_e3t"      unit="degC/s * m" >  ttrd_ldf * e3t </field> 
     782      <field id="strd_ldf_e3t"      unit="1e-3/s * m" >  strd_ldf * e3t </field> 
     783      <field id="ttrd_zdf_e3t"      unit="degC/s * m" >  ttrd_zdf * e3t </field> 
     784      <field id="strd_zdf_e3t"      unit="1e-3/s * m" >  strd_zdf * e3t </field> 
     785      <field id="ttrd_evd_e3t"      unit="degC/s * m" >  ttrd_evd * e3t </field> 
     786      <field id="strd_evd_e3t"      unit="1e-3/s * m" >  strd_evd * e3t </field> 
     787 
     788      <!-- ln_traldf_iso=T only (iso-neutral diffusion) --> 
     789      <field id="ttrd_iso_e3t"      unit="degC/s * m"  >  ttrd_iso * e3t </field> 
     790      <field id="strd_iso_e3t"      unit="1e-3/s * m"  >  strd_iso * e3t </field> 
     791      <field id="ttrd_zdfp_e3t"     unit="degC/s * m"  >  ttrd_zdfp * e3t </field> 
     792      <field id="strd_zdfp_e3t"     unit="1e-3/s * m"  >  strd_zdfp * e3t </field> 
     793 
     794      <!-- --> 
     795      <field id="ttrd_dmp_e3t"      unit="degC/s * m"  >  ttrd_dmp * e3t </field> 
     796      <field id="strd_dmp_e3t"      unit="1e-3/s * m"  >  strd_dmp * e3t </field> 
     797      <field id="ttrd_bbl_e3t"      unit="degC/s * m"  >  ttrd_bbl * e3t </field> 
     798      <field id="strd_bbl_e3t"      unit="1e-3/s * m"  >  strd_bbl * e3t </field> 
     799      <field id="ttrd_npc_e3t"      unit="degC/s * m"  >  ttrd_npc * e3t </field> 
     800      <field id="strd_npc_e3t"      unit="1e-3/s * m"  >  strd_npc * e3t </field> 
     801      <field id="ttrd_qns_e3t"      unit="degC/s * m"  >  ttrd_qns * e3t_surf </field> 
     802      <field id="strd_cdt_e3t"      unit="degC/s * m"  >  strd_cdt * e3t_surf </field> 
     803      <field id="ttrd_qsr_e3t"      unit="degC/s * m"  >  ttrd_qsr * e3t </field> 
     804      <field id="ttrd_bbc_e3t"      unit="degC/s * m"  >  ttrd_bbc * e3t </field> 
     805      <field id="ttrd_atf_e3t"      unit="degC/s * m"  >  ttrd_atf * e3t </field> 
     806      <field id="strd_atf_e3t"      unit="1e-3/s * m"  >  strd_atf * e3t </field> 
     807      <field id="ttrd_tot_e3t"      unit="degC/s * m"  >  ttrd_tot * e3t </field> 
     808      <field id="strd_tot_e3t"      unit="1e-3/s * m"  >  strd_tot * e3t </field> 
     809 
    694810 
    695811      <!-- variables available with ln_KE_trd --> 
     
    785901 
    786902     <field_group id="ptrc_T" grid_ref="grid_T_3D"> 
     903       <!-- PISCES standard : variables available with ln_p4z  --> 
    787904       <field id="DIC"          long_name="Dissolved inorganic Concentration"        unit="mmol/m3" /> 
    788        <field id="DIC_E3T"      long_name="DIC * E3T"                                unit="mmol/m2" > DIC * e3t </field > 
     905       <field id="DIC_e3t"      long_name="DIC * e3t"                                unit="mmol/m2" > DIC * e3t </field > 
    789906       <field id="Alkalini"     long_name="Total Alkalinity Concentration"           unit="mmol/m3" /> 
    790        <field id="Alkalini_E3T" long_name="Alkalini * E3T"                           unit="mmol/m2"  > Alkalini * e3t </field > 
     907       <field id="Alkalini_e3t" long_name="Alkalini * e3t"                           unit="mmol/m2"  > Alkalini * e3t </field > 
    791908       <field id="O2"           long_name="Oxygen Concentration"                     unit="mmol/m3" /> 
    792        <field id="O2_E3T"       long_name="O2 * E3T"                                 unit="mmol/m2"  > O2 * e3t </field > 
     909       <field id="O2_e3t"       long_name="O2 * e3t"                                 unit="mmol/m2"  > O2 * e3t </field > 
    793910       <field id="CaCO3"        long_name="Calcite Concentration"                    unit="mmol/m3" /> 
    794        <field id="CaCO3_E3T"    long_name="CaCO3 * E3T"                              unit="mmol/m2"  > CaCO3 * e3t </field > 
     911       <field id="CaCO3_e3t"    long_name="CaCO3 * e3t"                              unit="mmol/m2"  > CaCO3 * e3t </field > 
    795912       <field id="PO4"          long_name="Phosphate Concentration"                  unit="mmol/m3" /> 
    796        <field id="PO4_E3T"      long_name="PO4 * E3T"                                unit="mmol/m2"  > PO4 * e3t </field > 
     913       <field id="PO4_e3t"      long_name="PO4 * e3t"                                unit="mmol/m2"  > PO4 * e3t </field > 
    797914       <field id="POC"          long_name="Small organic carbon Concentration"       unit="mmol/m3" /> 
    798        <field id="POC_E3T"      long_name="POC * E3T"                                unit="mmol/m2"  > POC * e3t </field > 
     915       <field id="POC_e3t"      long_name="POC * e3t"                                unit="mmol/m2"  > POC * e3t </field > 
    799916       <field id="Si"           long_name="Silicate Concentration"                   unit="mmol/m3" /> 
    800        <field id="Si_E3T"       long_name="Si * E3T"                                 unit="mmol/m2"  > Si * e3t </field > 
     917       <field id="Si_e3t"       long_name="Si * e3t"                                 unit="mmol/m2"  > Si * e3t </field > 
    801918       <field id="PHY"          long_name="(Nano)Phytoplankton Concentration"        unit="mmol/m3" /> 
    802        <field id="PHY_E3T"      long_name="PHY * E3T"                                unit="mmol/m2"  > PHY * e3t </field > 
     919       <field id="PHY_e3t"      long_name="PHY * e3t"                                unit="mmol/m2"  > PHY * e3t </field > 
    803920       <field id="ZOO"          long_name="(Micro)Zooplankton Concentration"         unit="mmol/m3" /> 
    804        <field id="ZOO_E3T"      long_name="ZOO2 * E3T"                               unit="mmol/m2"  > ZOO * e3t </field > 
     921       <field id="ZOO_e3t"      long_name="ZOO2 * e3t"                               unit="mmol/m2"  > ZOO * e3t </field > 
    805922       <field id="DOC"          long_name="Dissolved organic Concentration"          unit="mmol/m3" /> 
    806        <field id="DOC_E3T"      long_name="DOC * E3T"                                unit="mmol/m2"  > DOC * e3t </field > 
     923       <field id="DOC_e3t"      long_name="DOC * e3t"                                unit="mmol/m2"  > DOC * e3t </field > 
    807924       <field id="PHY2"         long_name="Diatoms Concentration"                    unit="mmol/m3" /> 
    808        <field id="PHY2_E3T"     long_name="PHY2 * E3T"                               unit="mmol/m2"  > PHY2 * e3t </field > 
     925       <field id="PHY2_e3t"     long_name="PHY2 * e3t"                               unit="mmol/m2"  > PHY2 * e3t </field > 
    809926       <field id="ZOO2"         long_name="Mesozooplankton Concentration"            unit="mmol/m3" /> 
    810        <field id="ZOO2_E3T"     long_name="ZOO2 * E3T"                               unit="mmol/m2"  > ZOO2 * e3t </field > 
     927       <field id="ZOO2_e3t"     long_name="ZOO2 * e3t"                               unit="mmol/m2"  > ZOO2 * e3t </field > 
    811928       <field id="DSi"          long_name="Diatoms Silicate Concentration"           unit="mmol/m3" /> 
    812        <field id="DSi_E3T"      long_name="Dsi * E3T"                                unit="mmol/m2"  > DSi * e3t </field > 
     929       <field id="DSi_e3t"      long_name="Dsi * e3t"                                unit="mmol/m2"  > DSi * e3t </field > 
    813930       <field id="Fer"          long_name="Dissolved Iron Concentration"             unit="mmol/m3" /> 
    814        <field id="Fer_E3T"      long_name="Fer * E3T"                                unit="mmol/m2"  > Fer * e3t </field > 
     931       <field id="Fer_e3t"      long_name="Fer * e3t"                                unit="mmol/m2"  > Fer * e3t </field > 
    815932       <field id="BFe"          long_name="Big iron particles Concentration"         unit="mmol/m3" /> 
    816        <field id="BFe_E3T"      long_name="BFe * E3T"                                unit="mmol/m2"  > BFe * e3t </field > 
     933       <field id="BFe_e3t"      long_name="BFe * e3t"                                unit="mmol/m2"  > BFe * e3t </field > 
    817934       <field id="GOC"          long_name="Big organic carbon Concentration"         unit="mmol/m3" /> 
    818        <field id="GOC_E3T"      long_name="GOC * E3T"                                unit="mmol/m2"  > GOC * e3t </field > 
     935       <field id="GOC_e3t"      long_name="GOC * e3t"                                unit="mmol/m2"  > GOC * e3t </field > 
    819936       <field id="SFe"          long_name="Small iron particles Concentration"       unit="mmol/m3" /> 
    820        <field id="SFe_E3T"      long_name="SFe * E3T"                                unit="mmol/m2"  > SFe * e3t </field > 
     937       <field id="SFe_e3t"      long_name="SFe * e3t"                                unit="mmol/m2"  > SFe * e3t </field > 
    821938       <field id="DFe"          long_name="Diatoms iron  Concentration"              unit="mmol/m3" /> 
    822        <field id="DFe_E3T"      long_name="DFe * E3T"                                unit="mmol/m2"  > DFe * e3t </field > 
     939       <field id="DFe_e3t"      long_name="DFe * e3t"                                unit="mmol/m2"  > DFe * e3t </field > 
    823940       <field id="GSi"          long_name="Sinking biogenic Silicate Concentration"  unit="mmol/m3" /> 
    824        <field id="GSi_E3T"      long_name="GSi * E3T"                                unit="mmol/m2"  > GSi * e3t </field > 
     941       <field id="GSi_e3t"      long_name="GSi * e3t"                                unit="mmol/m2"  > GSi * e3t </field > 
    825942       <field id="NFe"          long_name="Nano iron Concentration"                  unit="mmol/m3" /> 
    826        <field id="NFe_E3T"      long_name="NFe * E3T"                                unit="mmol/m2"  > NFe * e3t </field > 
     943       <field id="NFe_e3t"      long_name="NFe * e3t"                                unit="mmol/m2"  > NFe * e3t </field > 
    827944       <field id="NCHL"         long_name="Nano chlorophyl Concentration"            unit="mg/m3"   /> 
    828        <field id="NCHL_E3T"     long_name="NCHL * E3T"                               unit="mmol/m2"  > NCHL * e3t </field > 
     945       <field id="NCHL_e3t"     long_name="NCHL * e3t"                               unit="mmol/m2"  > NCHL * e3t </field > 
    829946       <field id="DCHL"         long_name="Diatoms chlorophyl Concentration"         unit="mg/m3"   /> 
    830        <field id="DCHL_E3T"     long_name="DCHL * E3T"                               unit="mmol/m2"  > DCHL * e3t </field > 
     947       <field id="DCHL_e3t"     long_name="DCHL * e3t"                               unit="mmol/m2"  > DCHL * e3t </field > 
    831948       <field id="NO3"          long_name="Nitrate Concentration"                    unit="mmol/m3" /> 
    832        <field id="NO3_E3T"      long_name="NO3 * E3T"                                unit="mmol/m2"  > NO3 * e3t </field > 
     949       <field id="NO3_e3t"      long_name="NO3 * e3t"                                unit="mmol/m2"  > NO3 * e3t </field > 
    833950       <field id="NH4"          long_name="Ammonium Concentration"                   unit="mmol/m3" /> 
    834        <field id="NH4_E3T"      long_name="NH4 * E3T"                                unit="mmol/m2"  > NH4 * e3t </field > 
    835  
    836        <!-- PISCES with Kriest parametisation : variables available with key_kriest --> 
    837        <field id="Num"         long_name="Number of organic particles"              unit="1" /> 
    838        <field id="Num_E3T"     long_name="Num * E3T"                                unit="m"  > Num * e3t </field > 
    839  
    840        <!-- PISCES light : variables available with key_pisces_reduced --> 
     951       <field id="NH4_e3t"      long_name="NH4 * e3t"                                unit="mmol/m2"  > NH4 * e3t </field > 
     952 
     953       <!-- PISCES quota : variables available with ln_p5z  --> 
     954 
     955       <field id="DON"          long_name="Dissolved organic N Concentration"        unit="mmol/m3" /> 
     956       <field id="DON_e3t"      long_name="DON * e3t"                                unit="mmol/m2"  > DON * e3t </field > 
     957       <field id="DOP"          long_name="Dissolved organic P Concentration"        unit="mmol/m3" /> 
     958       <field id="DOP_e3t"      long_name="DOP * e3t"                                unit="mmol/m2"  > DOP * e3t </field > 
     959       <field id="PON"          long_name="Small PON Concentration"                  unit="mmol/m3" /> 
     960       <field id="PON_e3t"      long_name="PON * e3t"                                unit="mmol/m2"  > PON * e3t </field > 
     961       <field id="POP"          long_name="Small POP Concentration"                  unit="mmol/m3" /> 
     962       <field id="POP_e3t"      long_name="POP * e3t"                                unit="mmol/m2"  > POP * e3t </field > 
     963       <field id="GON"          long_name="Big PON Concentration"                    unit="mmol/m3" /> 
     964       <field id="GON_e3t"      long_name="GON * e3t"                                unit="mmol/m2"  > GON * e3t </field > 
     965       <field id="GOP"          long_name="Big POP Concentration"                    unit="mmol/m3" /> 
     966       <field id="GOP_e3t"      long_name="GOP * e3t"                                unit="mmol/m2"  > GOP * e3t </field > 
     967       <field id="PHYN"         long_name="Nanophytoplankton N biomass"              unit="mmol/m3" /> 
     968       <field id="PHYN_e3t"     long_name="PHYN * e3t"                               unit="mmol/m2"  > PHYN * e3t </field > 
     969       <field id="PHYP"         long_name="Nanophytoplankton P biomass"              unit="mmol/m3" /> 
     970       <field id="PHYP_e3t"     long_name="PHYP * e3t"                               unit="mmol/m2"  > PHYP * e3t </field > 
     971       <field id="DIAN"         long_name="Diatoms N biomass"                        unit="mmol/m3" /> 
     972       <field id="DIAN_e3t"     long_name="DIAN * e3t"                               unit="mmol/m2"  > DIAN * e3t </field > 
     973       <field id="DIAP"         long_name="Diatoms P biomass"                        unit="mmol/m3" /> 
     974       <field id="DIAP_e3t"     long_name="DIAP * e3t"                               unit="mmol/m2"  > DIAP * e3t </field > 
     975       <field id="PIC"          long_name="Picophytoplankton C biomass"              unit="mmol/m3" /> 
     976       <field id="PIC_e3t"      long_name="PIC * e3t"                                unit="mmol/m2"  > PIC * e3t </field > 
     977       <field id="PICN"         long_name="Picophytoplankton N biomass"              unit="mmol/m3" /> 
     978       <field id="PICN_e3t"     long_name="PICN * e3t"                               unit="mmol/m2"  > PICN * e3t </field > 
     979       <field id="PICP"         long_name="Picophytoplankton P biomass"              unit="mmol/m3" /> 
     980       <field id="PICP_e3t"     long_name="PICP * e3t"                               unit="mmol/m2"  > PICP * e3t </field > 
     981       <field id="PFe"          long_name="Picophytoplankton Fe biomass"             unit="mmol/m3" /> 
     982       <field id="PFe_e3t"      long_name="PFe * e3t"                                unit="mmol/m2"  > PFe * e3t </field > 
     983       <field id="PCHL"         long_name="Picophytoplankton Chl biomass"            unit="mg/m3" /> 
     984       <field id="PCHL_e3t"     long_name="PCHL * e3t"                               unit="mmol/m2"  > PCHL * e3t </field > 
     985 
     986      <!-- PISCES with ligand parametisation : variables available namelist paramter ln_ligand --> 
     987       <field id="LGW"         long_name="Weak ligands concentration"                unit="mmol/m3" /> 
     988       <field id="LGW_e3t"     long_name="LGW * e3t"                                 unit="mmol/m2"  > LGW * e3t </field > 
     989       <field id="LFe"         long_name="Lithogenic iron concentration"             unit="mmol/m3" /> 
     990       <field id="LFe_e3t"     long_name="LFe * e3t"                                 unit="mmol/m2"  > LFe * e3t </field > 
     991 
     992       <!-- PISCES light : variables available with ln_p2z  --> 
    841993       <field id="DET"         long_name="Detritus"                                 unit="mmol-N/m3" /> 
    842        <field id="DET_E3T"     long_name="DET * E3T"                                unit="mmol-N/m2"  > DET * e3t </field > 
     994       <field id="DET_e3t"     long_name="DET * e3t"                                unit="mmol-N/m2"  > DET * e3t </field > 
    843995       <field id="DOM"         long_name="Dissolved Organic Matter"                 unit="mmol-N/m3" /> 
    844        <field id="DOM_E3T"     long_name="DOM * E3T"                                unit="mmol-N/m2"  > DOM * e3t </field > 
    845  
    846        <!-- CFC11 : variables available with key_cfc --> 
    847        <field id="CFC11"       long_name="CFC-11 Concentration"                     unit="umol/m3" /> 
    848        <field id="CFC11_E3T"   long_name="CFC11 * E3T"                              unit="umol/m2"  > CFC11 * e3t </field > 
    849        <!-- Bomb C14 : variables available with key_c14b --> 
    850        <field id="C14B"     long_name="Bomb C14 Concentration"                      unit="1"         /> 
    851        <field id="C14B_E3T"    long_name="C14B * E3T"                               unit="m"  > C14B * e3t </field > 
     996       <field id="DOM_e3t"     long_name="DOM * e3t"                                unit="mmol-N/m2"  > DOM * e3t </field > 
     997 
     998       <!-- CFC11 : variables available with ln_cfc11 --> 
     999       <field id="CFC11"       long_name="Chlorofluoro carbon11 Concentration"      unit="umol/m3" /> 
     1000       <field id="CFC11_e3t"   long_name="CFC11 * e3t"                              unit="umol/m2"  > CFC11 * e3t </field > 
     1001 
     1002       <!-- CFC12 : variables available with ln_cfc12 --> 
     1003       <field id="CFC12"       long_name="Chlorofluoro carbon12 Concentration"      unit="umol/m3" /> 
     1004       <field id="CFC12_e3t"   long_name="CFC12 * e3t"                              unit="umol/m2"  > CFC12 * e3t </field > 
     1005 
     1006       <!-- SF6 : variables available with ln_sf6 --> 
     1007       <field id="SF6"       long_name="Sulfur hexafluoride Concentration"      unit="umol/m3" /> 
     1008       <field id="SF6_e3t"   long_name="SF6 * e3t"                              unit="umol/m2"  > SF6 * e3t </field > 
     1009 
     1010       <!-- C14 : variables available with ln_c14 --> 
     1011       <field id="RC14"        long_name="Radiocarbon ratio"                        unit="-"         /> 
     1012       <field id="RC14_e3t"    long_name="RC14 * e3t"                               unit="m"  > RC14 * e3t </field > 
     1013 
     1014       <!-- AGE : variables available with ln_age --> 
     1015       <field id="Age"        long_name="Sea water age since surface contact"       unit="yr"         /> 
     1016       <field id="Age_e3t"    long_name="Age * e3t"                                 unit="yr * m"  > Age * e3t </field > 
     1017 
    8521018     </field_group> 
    8531019 
     
    8601026       <field id="PAR"         long_name="Photosynthetically Available Radiation"  unit="W/m2"       grid_ref="grid_T_3D" /> 
    8611027       <field id="PARDM"       long_name="Daily mean PAR"                          unit="W/m2"       grid_ref="grid_T_3D" /> 
    862        <field id="PPPHY"       long_name="Primary production of nanophyto"         unit="mol/m3/s"   grid_ref="grid_T_3D" /> 
    863        <field id="PPPHY2"      long_name="Primary production of diatoms"           unit="mol/m3/s"   grid_ref="grid_T_3D" /> 
    864        <field id="PPNEWN"      long_name="New Primary production of nanophyto"     unit="mol/m3/s"   grid_ref="grid_T_3D" /> 
    865        <field id="PPNEWD"      long_name="New Primary production of diatoms"       unit="mol/m3/s"   grid_ref="grid_T_3D" /> 
    866        <field id="PBSi"        long_name="Primary production of Si diatoms"        unit="mol/m3/s"   grid_ref="grid_T_3D" /> 
    867        <field id="PFeN"        long_name="Primary production of nano iron"         unit="mol/m3/s"   grid_ref="grid_T_3D" /> 
     1028       <field id="PPPHYN"      long_name="Primary production of nanophyto"         unit="molC/m3/s"  grid_ref="grid_T_3D" /> 
     1029       <field id="PPPHYP"      long_name="Primary production of picophyto"         unit="molC/m3/s"  grid_ref="grid_T_3D" /> 
     1030       <field id="PPPHYD"      long_name="Primary production of diatoms"           unit="molC/m3/s"  grid_ref="grid_T_3D" /> 
     1031       <field id="PPNEWN"      long_name="New Primary production of nanophyto"     unit="molC/m3/s"  grid_ref="grid_T_3D" /> 
     1032       <field id="PPNEWP"      long_name="New Primary production of picophyto"     unit="molC/m3/s"  grid_ref="grid_T_3D" /> 
     1033       <field id="PPNEWD"      long_name="New Primary production of diatoms"       unit="molC/m3/s"  grid_ref="grid_T_3D" /> 
     1034       <field id="PBSi"        long_name="Primary production of Si diatoms"        unit="molC/m3/s"  grid_ref="grid_T_3D" /> 
     1035       <field id="PFeN"        long_name="Primary production of nano iron"         unit="molC/m3/s"  grid_ref="grid_T_3D" /> 
     1036       <field id="PFeP"        long_name="Primary production of pico iron"         unit="molC/m3/s"  grid_ref="grid_T_3D" /> 
    8681037       <field id="PFeD"        long_name="Primary production of diatoms iron"      unit="mol/m3/s"   grid_ref="grid_T_3D" /> 
    8691038       <field id="xfracal"     long_name="Calcifying fraction"                     unit="1"          grid_ref="grid_T_3D" /> 
     
    8741043       <field id="REMIN"       long_name="Oxic remineralization of OM"             unit="mol/m3/s"   grid_ref="grid_T_3D" /> 
    8751044       <field id="DENIT"       long_name="Anoxic remineralization of OM"           unit="mol/m3/s"   grid_ref="grid_T_3D" /> 
     1045       <field id="REMINP"       long_name="Oxic remineralization rate of POC"      unit="d-1"        grid_ref="grid_T_3D" /> 
     1046       <field id="REMING"       long_name="Oxic remineralization rate of GOC"      unit="d-1"        grid_ref="grid_T_3D" /> 
    8761047       <field id="Nfix"        long_name="Nitrogen fixation"                       unit="mol/m3/s"   grid_ref="grid_T_3D" /> 
    8771048       <field id="Mumax"       long_name="Maximum growth rate"                     unit="s-1"        grid_ref="grid_T_3D" /> 
    8781049       <field id="MuN"         long_name="Realized growth rate for nanophyto"      unit="s-1"        grid_ref="grid_T_3D" /> 
     1050       <field id="MuP"         long_name="Realized growth rate for picophyto"      unit="s-1"        grid_ref="grid_T_3D" /> 
    8791051       <field id="MuD"         long_name="Realized growth rate for diatomes"       unit="s-1"        grid_ref="grid_T_3D" /> 
     1052       <field id="MunetN"      long_name="Net growth rate for nanophyto"           unit="s-1"        grid_ref="grid_T_3D" /> 
     1053       <field id="MunetP"      long_name="Net growth rate for picophyto"           unit="s-1"        grid_ref="grid_T_3D" /> 
     1054       <field id="MunetD"      long_name="Net growth rate for diatomes"            unit="s-1"        grid_ref="grid_T_3D" /> 
    8801055       <field id="LNnut"       long_name="Nutrient limitation term in Nanophyto"   unit=""           grid_ref="grid_T_3D" /> 
     1056       <field id="LPnut"       long_name="Nutrient limitation term in Picophyto"   unit="-"          grid_ref="grid_T_3D" /> 
    8811057       <field id="LDnut"       long_name="Nutrient limitation term in Diatoms"     unit=""           grid_ref="grid_T_3D" /> 
    8821058       <field id="LNFe"        long_name="Iron limitation term in Nanophyto"       unit=""           grid_ref="grid_T_3D" /> 
     1059       <field id="LPFe"        long_name="Iron limitation term in Picophyto"       unit="-"          grid_ref="grid_T_3D" /> 
    8831060       <field id="LDFe"        long_name="Iron limitation term in Diatoms"         unit=""           grid_ref="grid_T_3D" /> 
    8841061       <field id="LNlight"     long_name="Light limitation term in Nanophyto"      unit=""           grid_ref="grid_T_3D" /> 
     1062       <field id="LPlight"     long_name="Light limitation term in Picophyto"      unit="-"          grid_ref="grid_T_3D" /> 
    8851063       <field id="LDlight"     long_name="Light limitation term in Diatoms"        unit=""           grid_ref="grid_T_3D" /> 
     1064       <field id="SIZEN"       long_name="Mean relative size of nanophyto."        unit="-"          grid_ref="grid_T_3D" /> 
     1065       <field id="SIZEP"       long_name="Mean relative size of picophyto."        unit="-"          grid_ref="grid_T_3D" /> 
     1066       <field id="SIZED"       long_name="Mean relative size of diatoms"           unit="-"          grid_ref="grid_T_3D" /> 
    8861067       <field id="Fe2"         long_name="Iron II concentration"                   unit="nmol/m3"    grid_ref="grid_T_3D" /> 
    8871068       <field id="Fe3"         long_name="Iron III concentration"                  unit="nmol/m3"    grid_ref="grid_T_3D" /> 
     
    8961077       <field id="Sdenit"      long_name="Nitrate reduction in the sediments"      unit="mol/m2/s"                        /> 
    8971078       <field id="Ironice"     long_name="Iron input/uptake due to sea ice"        unit="mol/m2/s"                        /> 
     1079       <field id="SedCal"      long_name="Calcite burial in the sediments"         unit="molC/m2/s"                       /> 
     1080       <field id="SedSi"       long_name="Silicon burial in the sediments"         unit="molSi/m2/s"                      /> 
     1081       <field id="SedC"        long_name="Organic C burial in the sediments"       unit="molC/m2/s"                       /> 
    8981082       <field id="HYDR"        long_name="Iron input from hydrothemal vents"       unit="mol/m2/s"   grid_ref="grid_T_3D" /> 
    8991083       <field id="EPC100"      long_name="Export of carbon particles at 100 m"     unit="mol/m2/s"                        /> 
     
    9141098       <field id="Ironsed"     long_name="Iron deposition from sediment"           unit="mol/m2/s"   grid_ref="grid_T_3D" /> 
    9151099 
    916  
    917        <!-- PISCES with Kriest parametisation : variables available with key_kriest --> 
    918        <field id="EPN100"      long_name="Particulate number flux at 100 m"        unit="mol/m2/s"                        /> 
    919        <field id="EXPN"        long_name="Particulate number flux"                 unit="mol/m2/s"   grid_ref="grid_T_3D" /> 
    920        <field id="XNUM"        long_name="Number of particles in aggregats"        unit="1"          grid_ref="grid_T_3D" /> 
    921        <field id="WSC"         long_name="sinking speed of mass flux"              unit="m2/s"       grid_ref="grid_T_3D" /> 
    922        <field id="WSN"         long_name="sinking speed of number flux"            unit="m2/s"       grid_ref="grid_T_3D" /> 
    923  
    9241100       <!-- dbio_T on T grid : variables available with key_diaar5 --> 
    9251101       <field id="TPP"         long_name="Total Primary production of phyto"                   unit="mol/m3/s"  grid_ref="grid_T_3D" /> 
     
    9301106       <field id="ZO2MIN"      long_name="Depth of oxygen minimum concentration"               unit="m"                              /> 
    9311107       <field id="INTNFIX"     long_name="Nitrogen fixation rate : vert. integrated"           unit="mol/m2/s"                       /> 
    932        <field id="INTPPPHY"    long_name="Vertically integrated primary production by nanophy" unit="mol/m2/s"                       /> 
    933        <field id="INTPPPHY2"   long_name="Vertically integrated primary production by diatom"  unit="mol/m2/s"                       /> 
     1108       <field id="INTPPPHYN"    long_name="Vertically integrated primary production by nanophy" unit="mol/m2/s"                       /> 
     1109       <field id="INTPPPHYD"   long_name="Vertically integrated primary production by diatom"  unit="mol/m2/s"                       /> 
    9341110       <field id="INTPP"       long_name="Vertically integrated primary production by phyto"   unit="mol/m2/s"                       /> 
    9351111       <field id="INTPNEW"     long_name="Vertically integrated new primary production"        unit="mol/m2/s"                       /> 
     
    9611137       <field id="TDETSED"     long_name="TDETSED"                                 unit=""  />  
    9621138 
    963        <!-- CFC11 : variables available with key_cfc --> 
    964        <field id="qtrCFC11"    long_name="Air-sea flux of CFC-11"                  unit="mol/m2/s"   /> 
    965        <field id="qintCFC11"   long_name="Cumulative air-sea flux of CFC-11"       unit="mol/m2"     /> 
    966  
    967        <!-- Bomb C14 : variables available with key_c14b --> 
    968        <field id="qtrC14b"     long_name="Air-sea flux of Bomb C14"                unit="mol/m2/s"   /> 
    969        <field id="qintC14b"    long_name="Cumulative air-sea flux of Bomb C14"     unit="mol/m2"     /> 
    970        <field id="fdecay"      long_name="Radiactive decay of Bomb C14"            unit="mol/m3"  grid_ref="grid_T_3D"  /> 
     1139       <!-- CFC11 : variables available with ln_cfc11 --> 
     1140       <field id="qtr_CFC11"    long_name="Air-sea flux of CFC-11"                  unit="mol/m2/s"   /> 
     1141       <field id="qint_CFC11"   long_name="Cumulative air-sea flux of CFC-11"       unit="mol/m2"     /> 
     1142 
     1143       <!-- CFC12 : variables available with ln_cfc12 --> 
     1144       <field id="qtr_CFC12"    long_name="Air-sea flux of CFC12"                  unit="mol/m2/s"   /> 
     1145       <field id="qint_CFC12"   long_name="Cumulative air-sea flux of CFC12"       unit="mol/m2"     /> 
     1146 
     1147       <!-- SF6 : variables available with ln_sf6 --> 
     1148       <field id="qtr_SF6"      long_name="Air-sea flux of SF6"                    unit="mol/m2/s"   /> 
     1149       <field id="qint_SF6"     long_name="Cumulative air-sea flux of SF6"         unit="mol/m2"     /> 
     1150 
     1151       <!--  C14 : variables available with ln_c14 --> 
     1152       <field id="DeltaC14"     long_name="Delta C14"                              unit="permil" grid_ref="grid_T_3D"   /> 
     1153       <field id="C14Age"       long_name="Radiocarbon age"                        unit="yr"     grid_ref="grid_T_3D"   /> 
     1154       <field id="RAge"         long_name="Reservoir Age"                          unit="yr"     /> 
     1155       <field id="qtr_C14"      long_name="Air-sea flux of C14"                    unit="1/m2/s"   /> 
     1156       <field id="qint_C14"     long_name="Cumulative air-sea flux of C14"         unit="1/m2"     /> 
    9711157     </field_group> 
    9721158 
    973      <field_group id="PISCES_scalar"  domain_ref="1point" > 
    974        <field id="pno3tot"         long_name="global mean nitrate concentration"                  unit="mol/m3"   /> 
     1159     <field_group id="tracer_scalar"  domain_ref="1point" > 
     1160     <!-- PISCES scalar  --> 
     1161       <field id="pno3tot"         long_name="Global mean nitrate concentration"                  unit="mol/m3"   /> 
    9751162       <field id="ppo4tot"         long_name="global mean phosphorus concentration"               unit="mol/m3"   /> 
    976        <field id="psiltot"         long_name="global mean silicate concentration"                 unit="mol/m3"   /> 
    977        <field id="palktot"         long_name="global mean alkalinity concentration"               unit="mol/m3"   /> 
    978        <field id="pfertot"         long_name="global mean iron concentration"                     unit="mol/m3"   /> 
    979        <field id="tcflx"           long_name="total Flux of Carbon out of the ocean"              unit="mol/s"   /> 
    980        <field id="tcflxcum"        long_name="cumulative total Flux of Carbon out of the ocean"   unit="mol/s"   /> 
    981        <field id="tcexp"           long_name="total Carbon export at 100m"                        unit="mol/s"   /> 
    982        <field id="tintpp"          long_name="global total integrated primary production"         unit="mol/s"   /> 
    983        <field id="tnfix"           long_name="global total nitrogen fixation"                     unit="mol/s"   /> 
     1163       <field id="psiltot"         long_name="Global mean silicate concentration"                 unit="mol/m3"   /> 
     1164       <field id="palktot"         long_name="Global mean alkalinity concentration"               unit="mol/m3"   /> 
     1165       <field id="pfertot"         long_name="Global mean iron concentration"                     unit="mol/m3"   /> 
     1166       <field id="tcflx"           long_name="Total Flux of Carbon out of the ocean"              unit="mol/s"   /> 
     1167       <field id="tcflxcum"        long_name="Cumulative total Flux of Carbon out of the ocean"   unit="mol/s"   /> 
     1168       <field id="tcexp"           long_name="Total Carbon export at 100m"                        unit="mol/s"   /> 
     1169       <field id="tintpp"          long_name="Global total integrated primary production"         unit="mol/s"   /> 
     1170       <field id="tnfix"           long_name="Global total nitrogen fixation"                     unit="mol/s"   /> 
    9841171       <field id="tdenit"          long_name="Total denitrification"                              unit="mol/s"   /> 
     1172     <!-- C14 scalar  --> 
     1173       <field id="AtmCO2"          long_name="Global atmospheric CO2"                             unit="ppm"   /> 
     1174       <field id="AtmC14"          long_name="Global atmospheric DeltaC14"                        unit="permil"   /> 
     1175       <field id="K_C14"           long_name="Global 14C/C exchange velocity"                     unit="m/yr"   /> 
     1176       <field id="K_CO2"           long_name="Global CO2 piston velocity"                         unit="cm/h"   /> 
     1177       <field id="C14Inv"          long_name="global Radiocarbon ocean inventory"                 unit="10^26 atoms"   /> 
    9851178     </field_group> 
    9861179 
  • branches/2016/dev_merge_2016/NEMOGCM/CONFIG/SHARED/namelist_pisces_ref

    r6945 r7403  
    11!!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    2 !! PISCES  (key_pisces) reference namelist (see below for key_pisces_reduced) 
     2!! PISCES reference namelist  
    33!!              1  - air-sea exchange                         (nampisext) 
    44!!              2  - biological parameters                    (nampisbio) 
     
    99!!              7  - parameters for calcite chemistry         (nampiscal) 
    1010!!              8  - parameters for inputs deposition         (nampissed) 
    11 !!              9  - parameters for Kriest parameterization   (nampiskrp, nampiskrs) 
    12 !!              10 - additional 2D/3D  diagnostics            (nampisdia) 
    1311!!              11 - Damping                                  (nampisdmp) 
    14 !>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    15 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     12!----------------------------------------------------------------------- 
     13&nampismod     !  Model used  
     14!----------------------------------------------------------------------- 
     15  ln_p2z    = .false.        !  LOBSTER model used 
     16  ln_p4z    = .true.         !  PISCES model used 
     17  ln_p5z    = .false.        !  PISCES QUOTA model used 
     18  ln_ligand = .false.        !  Enable  organic ligands 
     19/ 
     20!----------------------------------------------------------------------- 
    1621&nampisext     !   air-sea exchange 
    17 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     22!----------------------------------------------------------------------- 
    1823   ln_co2int  =  .false. ! read atm pco2 from a file (T) or constant (F) 
    1924   atcco2     =  280.    ! Constant value atmospheric pCO2 - ln_co2int = F 
     
    2328!                        ! then the first atmospheric CO2 record read is at years(1) 
    2429/ 
    25 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     30!----------------------------------------------------------------------- 
    2631&nampisatm     !  Atmospheric prrssure  
    27 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     32!----------------------------------------------------------------------- 
    2833!              !  file name   ! frequency (hours) ! variable  ! time interp. !  clim  ! 'yearly'/ ! weights  ! rotation ! land/sea mask ! 
    2934!              !              !  (if <0  months)  !   name    !   (logical)  !  (T/F) ! 'monthly' ! filename ! pairing  ! filename      ! 
    3035   sn_patm     = 'presatm'    ,     -1            , 'patm'    ,  .true.      , .true. , 'yearly'  , ''       , ''       , '' 
     36   sn_atmco2   = 'presatmco2' ,     -1            , 'xco2'    ,  .true.      , .true. , 'yearly'  , ''       , ''       , '' 
    3137   cn_dir      = './'     !  root directory for the location of the dynamical files 
    3238! 
    33    ln_presatm  = .false.   ! constant atmopsheric pressure (F) or from a file (T) 
    34 / 
    35 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     39   ln_presatm    = .false.   ! constant atmopsheric pressure (F) or from a file (T) 
     40   ln_presatmco2 = .false.   ! Read spatialized atm co2 files [ppm] if TRUE 
     41/ 
     42!----------------------------------------------------------------------- 
    3643&nampisbio     !   biological parameters 
    37 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     44!----------------------------------------------------------------------- 
    3845   nrdttrc    =  1        ! time step frequency for biology 
    3946   wsbio      =  2.       ! POC sinking speed 
    4047   xkmort     =  2.E-7    ! half saturation constant for mortality 
    4148   ferat3     =  10.E-6   ! Fe/C in zooplankton  
    42    wsbio2     =  30.      ! Big particles sinking speed 
     49   wsbio2     =  50.      ! Big particles sinking speed 
     50   wsbio2max  =  50.      ! Big particles maximum sinking speed 
     51   wsbio2scale=  5000.    ! Big particles length scale of sinking 
    4352   niter1max  =  1        ! Maximum number of iterations for POC 
    44    niter2max  =  1        ! Maximum number of iterations for GOC 
    45 / 
    46 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    47 &nampislim     !   parameters for nutrient limitations 
    48 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     53   niter2max  =  2        ! Maximum number of iterations for GOC 
     54!                         !  ln_ligand enabled 
     55   wfep       =  0.2      ! FeP sinking speed  
     56   ldocp      =  1.E-5    ! Phyto ligand production per unit doc  
     57   ldocz      =  1.E-5    ! Zoo ligand production per unit doc  
     58   lthet      =  0.5      ! Proportional loss of ligands due to Fe uptake  
     59!                         !  ln_p5z enabled 
     60   no3rat3    =  0.182    ! N/C ratio in zooplankton 
     61   po4rat3    =  0.0094   ! P/C ratio in zooplankton 
     62/ 
     63!----------------------------------------------------------------------- 
     64&namp4zlim     !   parameters for nutrient limitations for PISCES std - ln_p4z 
     65!----------------------------------------------------------------------- 
    4966   concnno3   =  1.e-6    ! Nitrate half saturation of nanophytoplankton 
    5067   concdno3   =  3.E-6    ! Nitrate half saturation for diatoms 
     
    6683   qdfelim    =  7.E-6    ! Optimal quota of diatoms 
    6784   caco3r     =  0.3      ! mean rain ratio 
    68    oxymin    =  1.E-6     ! Half-saturation constant for anoxia 
    69 / 
    70 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     85   oxymin     =  1.E-6    ! Half-saturation constant for anoxia 
     86/ 
     87!----------------------------------------------------------------------- 
     88&namp5zlim     !   parameters for nutrient limitations PISCES QUOTA - ln_p5z 
     89!----------------------------------------------------------------------- 
     90   concnno3   =  3e-6     ! Nitrate half saturation of nanophytoplankton 
     91   concpno3   =  1e-6 
     92   concdno3   =  4E-6     ! Phosphate half saturation for diatoms 
     93   concnnh4   =  1.5E-6   ! NH4 half saturation for phyto 
     94   concpnh4   =  4E-7 
     95   concdnh4   =  2E-6     ! NH4 half saturation for diatoms 
     96   concnpo4   =  3E-6     ! PO4 half saturation for phyto 
     97   concppo4   =  1.5E-6 
     98   concdpo4   =  4E-6     ! PO4 half saturation for diatoms 
     99   concnfer   =  3E-9   ! Iron half saturation for phyto 
     100   concpfer   =  1.5E-9 
     101   concdfer   =  4E-9   ! Iron half saturation for diatoms 
     102   concbfe    =  1.E-11   ! Half-saturation for Fe limitation of Bacteria 
     103   concbnh4   =  1.E-7    ! NH4 half saturation for phyto 
     104   concbno3   =  5.E-7    ! Phosphate half saturation for diatoms 
     105   concbpo4   =  1E-7     ! Phosphate half saturation for bacteria 
     106   xsizedia   =  1.E-6    ! Minimum size criteria for diatoms 
     107   xsizephy   =  1.E-6    ! Minimum size criteria for phyto 
     108   xsizepic   =  1.E-6 
     109   xsizern    =  1.0      ! Size ratio for nanophytoplankton 
     110   xsizerp    =  1.0 
     111   xsizerd    =  4.0      ! Size ratio for diatoms 
     112   xksi1      =  2.E-6    ! half saturation constant for Si uptake 
     113   xksi2      =  20E-6  ! half saturation constant for Si/C 
     114   xkdoc      =  417.E-6  ! half-saturation constant of DOC remineralization 
     115   caco3r     =  0.35     ! mean rain ratio 
     116   oxymin     =  1.E-6    ! Half-saturation constant for anoxia 
     117/ 
     118!----------------------------------------------------------------------- 
     119&namp5zquota    !   parameters for nutrient limitations PISCES quota - ln_p5z 
     120!----------------------------------------------------------------------- 
     121   qfnopt     =  7.E-6    ! Optimal Fe quota of nanophyto 
     122   qfpopt     =  7.E-6    ! Optimal Fe quota of picophyto 
     123   qfdopt     =  7.E-6    ! Optimal quota of diatoms 
     124   qnnmin     =  0.29     ! Minimal N quota for nano 
     125   qnnmax     =  1.39     ! Maximal N quota for nano 
     126   qpnmin     =  0.28     ! Minimal P quota for nano 
     127   qpnmax     =  1.06     ! Maximal P quota for nano 
     128   qnpmin     =  0.42     ! Minimal N quota for pico 
     129   qnpmax     =  1.39     ! Maximal N quota for pico 
     130   qppmin     =  0.25     ! Minimal P quota for pico 
     131   qppmax     =  0.7      ! Maximal P quota for pico 
     132   qndmin     =  0.25     ! Minimal N quota for diatoms 
     133   qndmax     =  1.39     ! Maximal N quota for diatoms 
     134   qpdmin     =  0.29     ! Minimal P quota for diatoms 
     135   qpdmax     =  1.32     ! Maximal P quota for diatoms 
     136   qfnmax     =  40E-6    ! Maximal Fe quota for nano 
     137   qfpmax     =  40E-6    ! Maximal Fe quota for pico 
     138   qfdmax     =  40E-6    ! Maximal Fe quota for diatoms 
     139/ 
     140!----------------------------------------------------------------------- 
    71141&nampisopt     !   parameters for optics 
    72 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     142!----------------------------------------------------------------------- 
    73143!              !  file name       ! frequency (hours) ! variable  ! time interp. !  clim  ! 'yearly'/ ! weights  ! rotation ! land/sea mask ! 
    74144!              !                  !  (if <0  months)  !   name    !   (logical)  !  (T/F) ! 'monthly' ! filename ! pairing  ! filename      ! 
     
    78148   parlux      =  0.43      ! Fraction of shortwave as PAR 
    79149/  
    80 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    81 &nampisprod     !   parameters for phytoplankton growth 
    82 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    83    pislope    =  2.       ! P-I slope 
    84    pislope2   =  2.       ! P-I slope  for diatoms 
     150!----------------------------------------------------------------------- 
     151&namp4zprod     !   parameters for phytoplankton growth for PISCES std - ln_p4z 
     152!----------------------------------------------------------------------- 
     153   pislopen   =  2.       ! P-I slope 
     154   pisloped   =  2.       ! P-I slope  for diatoms 
    85155   xadap      =  0.       ! Adaptation factor to low light 
    86    excret     =  0.05     ! excretion ratio of phytoplankton 
    87    excret2    =  0.05     ! excretion ratio of diatoms 
     156   excretn    =  0.05     ! excretion ratio of phytoplankton 
     157   excretd    =  0.05     ! excretion ratio of diatoms 
    88158   ln_newprod =  .true.   ! Enable new parame. of production (T/F)  
    89159   bresp      =  0.033    ! Basal respiration rate 
     
    95165   grosip     =  0.159    ! mean Si/C ratio 
    96166/ 
    97 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    98 &nampismort     !   parameters for phytoplankton sinks 
    99 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    100    wchl       =  0.01    ! quadratic mortality of phytoplankton 
     167!----------------------------------------------------------------------- 
     168&namp5zprod     !   parameters for phytoplankton growth for PISCES quota - ln_p5z 
     169!----------------------------------------------------------------------- 
     170   pislopen   =  3.       ! P-I slope 
     171   pislopep   =  3.       ! P-I slope for picophytoplankton 
     172   pisloped   =  3.       ! P-I slope  for diatoms 
     173   excretn    =  0.05     ! excretion ratio of phytoplankton 
     174   excretp    =  0.05     ! excretion ratio of picophytoplankton 
     175   excretd    =  0.05     ! excretion ratio of diatoms 
     176   xadap      =  0.       ! Adaptation factor to low light 
     177   bresp      =  0.02     ! Basal respiration rate 
     178   thetannm   =  0.25     ! Maximum Chl/N in nanophytoplankton 
     179   thetanpm   =  0.25     ! Maximum Chl/N in picophytoplankton 
     180   thetandm   =  0.3      ! Maximum Chl/N in diatoms 
     181   chlcmin    =  0.004    ! Minimum Chl/c in phytoplankton 
     182   grosip     =  0.131    ! mean Si/C ratio 
     183/ 
     184!----------------------------------------------------------------------- 
     185&namp4zmort     !   parameters for phytoplankton sinks for PISCES std - ln_p4z 
     186!----------------------------------------------------------------------- 
     187   wchl       =  0.01     ! quadratic mortality of phytoplankton 
    101188   wchld      =  0.01     ! maximum quadratic mortality of diatoms 
    102189   wchldm     =  0.03     ! maximum quadratic mortality of diatoms 
     
    104191   mprat2     =  0.01     ! Diatoms mortality rate 
    105192/ 
    106 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    107 &nampismes     !   parameters for mesozooplankton 
    108 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     193!----------------------------------------------------------------------- 
     194&namp5zmort     !   parameters for phytoplankton sinks for PISCES quota - ln_p5z 
     195!----------------------------------------------------------------------- 
     196   wchln      =  0.01     ! quadratic mortality of nanophytoplankton 
     197   wchlp      =  0.01     ! quadratic mortality of picophytoplankton 
     198   wchld      =  0.01     ! maximum quadratic mortality of diatoms 
     199   wchldm     =  0.02     ! maximum quadratic mortality of diatoms 
     200   mpratn     =  0.01     ! nanophytoplankton mortality rate 
     201   mpratp     =  0.01     ! picophytoplankton mortality rate 
     202   mprat2     =  0.01     ! Diatoms mortality rate 
     203/ 
     204!----------------------------------------------------------------------- 
     205&namp4zmes     !   parameters for mesozooplankton for PISCES std - ln_p4z 
     206!----------------------------------------------------------------------- 
    109207   part2      =  0.75     ! part of calcite not dissolved in mesozoo guts 
    110208   grazrat2   =  0.75     ! maximal mesozoo grazing rate 
     
    126224   grazflux   =  2.e3     ! flux-feeding rate 
    127225/ 
    128 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    129 &nampiszoo     !   parameters for microzooplankton 
    130 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    131    part       =  0.5      ! part of calcite not dissolved in microzoo gutsa 
     226!----------------------------------------------------------------------- 
     227&namp5zmes     !   parameters for mesozooplankton 
     228!----------------------------------------------------------------------- 
     229   part2      =  0.75     ! part of calcite not dissolved in mesozoo guts 
     230   grazrat2   =  0.85     ! maximal mesozoo grazing rate 
     231   bmetexc2   =  .true.   ! Metabolic use of excess carbon  
     232   resrat2    =  0.005    ! exsudation rate of mesozooplankton 
     233   mzrat2     =  0.02     ! mesozooplankton mortality rate 
     234   xpref2d    =  1.       ! zoo preference for phyto 
     235   xpref2p    =  1.       ! zoo preference for POC 
     236   xpref2z    =  1.       ! zoo preference for zoo 
     237   xpref2m    =  0.2      ! meso preference for zoo 
     238   xpref2c    =  0.3      ! zoo preference for poc 
     239   xthresh2zoo = 1E-8     ! zoo feeding threshold for mesozooplankton 
     240   xthresh2dia = 1E-8     ! diatoms feeding threshold for mesozooplankton 
     241   xthresh2phy = 1E-8     ! nanophyto feeding threshold for mesozooplankton 
     242   xthresh2mes = 1E-8     ! meso feeding threshold for mesozooplankton 
     243   xthresh2poc = 1E-8     ! poc feeding threshold for mesozooplankton 
     244   xthresh2    =  3E-7     ! Food threshold for grazing 
     245   xkgraz2     =  20.E-6   ! half sturation constant for meso grazing 
     246   epsher2     =  0.5      ! Efficicency of Mesozoo growth 
     247   ssigma2     =  0.5     ! Fraction excreted as semi-labile DOM 
     248   srespir2    =  0.2     ! Active respiration 
     249   unass2c     =  0.3     ! non assimilated fraction of P by mesozoo 
     250   unass2n     =  0.3     ! non assimilated fraction of N by mesozoo 
     251   unass2p     =  0.3     ! non assimilated fraction of P by mesozoo 
     252   grazflux   =  3.e3     ! flux-feeding rate 
     253/ 
     254!----------------------------------------------------------------------- 
     255&namp4zzoo     !   parameters for microzooplankton for PISCES std - ln_p4z 
     256!----------------------------------------------------------------------- 
     257   part       =  0.5      ! part of calcite not dissolved in microzoo guts 
    132258   grazrat    =  3.0      ! maximal zoo grazing rate 
    133259   resrat     =  0.03     ! exsudation rate of zooplankton 
     
    145271   unass      =  0.3      ! non assimilated fraction of phyto by zoo 
    146272/ 
    147 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     273!----------------------------------------------------------------------- 
     274&namp5zzoo     !   parameters for microzooplankton 
     275!----------------------------------------------------------------------- 
     276   part       =  0.5      ! part of calcite not dissolved in microzoo gutsa 
     277   grazrat    =  2.75     ! maximal zoo grazing rate 
     278   bmetexc    =  .true.   ! Metabolic use of excess carbon 
     279   resrat     =  0.03     ! exsudation rate of zooplankton 
     280   mzrat      =  0.005    ! zooplankton mortality rate 
     281   xprefc     =  0.1      ! Microzoo preference for POM 
     282   xprefn     =  1.       ! Microzoo preference for Nanophyto 
     283   xprefp     =  1.6      ! Microzoo preference for picophyto 
     284   xprefd     =  1.0      ! Microzoo preference for Diatoms 
     285   xprefz     =  0.3      ! Microzoo preference for microzooplankton 
     286   xthreshdia =  1.E-8    ! Diatoms feeding threshold for microzooplankton 
     287   xthreshphy =  1.E-8    ! Nanophyto feeding threshold for microzooplankton 
     288   xthreshpic =  1.E-8 
     289   xthreshzoo =  1.E-8    ! Nanophyto feeding threshold for microzooplankton 
     290   xthreshpoc =  1.E-8    ! POC feeding threshold for microzooplankton 
     291   xthresh    =  3.E-7    ! Food threshold for feeding 
     292   xkgraz     =  20.E-6   ! half sturation constant for grazing 
     293   epsher     =  0.5      ! Efficiency of microzoo growth 
     294   ssigma     =  0.5      ! Fraction excreted as semi-labile DOM 
     295   srespir    =  0.2      ! Active respiration 
     296   unassc     =  0.3      ! non assimilated fraction of C by zoo 
     297   unassn     =  0.3      ! non assimilated fraction of C by zoo 
     298   unassp     =  0.3      ! non assimilated fraction of C by zoo 
     299/ 
     300!----------------------------------------------------------------------- 
    148301&nampisfer     !   parameters for iron chemistry 
    149 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     302!----------------------------------------------------------------------- 
    150303   ln_fechem =  .false.   ! complex iron chemistry ( T/F ) 
    151304   ln_ligvar =  .false.   ! variable ligand concentration 
    152    xlam1     =  0.005     ! scavenging rate of Iron 
    153    xlamdust  =  150.0     ! Scavenging rate of dust 
    154    ligand    =  0.6E-9    ! Ligands concentration  
    155  
    156 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     305   ln_fecolloid = .false. ! variable colloidal fraction 
     306   xlam1        =  0.005  ! scavenging rate of Iron 
     307   xlamdust     =  150.0  ! Scavenging rate of dust 
     308   ligand       =  0.6E-9 ! Ligands concentration  
     309   kfep         =  0.     ! Nanoparticle formation rate constant 
     310/ 
     311!-----------------------------------------------------------------------   
    157312&nampisrem     !   parameters for remineralization 
    158 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     313!----------------------------------------------------------------------- 
    159314   xremik    =  0.3       ! remineralization rate of DOC 
    160    xremip    =  0.025     ! remineralisation rate of POC 
    161315   nitrif    =  0.05      ! NH4 nitrification rate 
    162316   xsirem    =  0.003     ! remineralization rate of Si 
    163317   xsiremlab =  0.03      ! fast remineralization rate of Si 
    164318   xsilab    =  0.5       ! Fraction of labile biogenic silica 
    165 / 
    166 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     319   feratb    =  10.E-6    ! Fe/C quota in bacteria 
     320   xkferb    =  2.5E-10   ! Half-saturation constant for bacteria Fe/C 
     321!                         ! ln_p5z 
     322   xremikc   =  0.25      ! remineralization rate of DOC 
     323   xremikn   =  0.35      ! remineralization rate of DON 
     324   xremikp   =  0.4       ! remineralization rate of DOP 
     325!   feratb    =  20E-6     ! Bacterial Fe/C ratio 
     326!   xkferb    =  3E-10     ! Half-saturation constant for bact. Fe/C 
     327/ 
     328!----------------------------------------------------------------------- 
     329&nampispoc     !   parameters for organic particles 
     330!----------------------------------------------------------------------- 
     331   xremip    =  0.035     ! remineralisation rate of PON 
     332   jcpoc     =  15        ! Number of lability classes 
     333   rshape    =  1.0       ! Shape of the gamma function 
     334!                         ! ln_p5z 
     335   xremipc   =  0.02      ! remineralisation rate of POC 
     336   xremipn   =  0.025     ! remineralisation rate of PON 
     337   xremipp   =  0.03      ! remineralisation rate of POP 
     338/ 
     339!----------------------------------------------------------------------- 
    167340&nampiscal     !   parameters for Calcite chemistry 
    168 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     341!----------------------------------------------------------------------- 
    169342   kdca       =  6.       ! calcite dissolution rate constant (1/time) 
    170343   nca        =  1.       ! order of dissolution reaction (dimensionless) 
    171344/ 
    172 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     345!----------------------------------------------------------------------- 
    173346&nampissbc     !   parameters for inputs deposition 
    174 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     347!----------------------------------------------------------------------- 
    175348!              !  file name        ! frequency (hours) ! variable      ! time interp. !  clim  ! 'yearly'/ ! weights  ! rotation ! land/sea mask ! 
    176349!              !                   !  (if <0  months)  !   name        !   (logical)  !  (T/F) ! 'monthly' ! filename ! pairing  ! filename      ! 
     
    205378   concfediaz  =  1.e-10   ! Diazotrophs half-saturation Cste for Iron 
    206379   hratio      =  1.e+7    ! Fe to 3He ratio assumed for vent iron supply  
    207 / 
    208 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     380!                          ! ln_ligand 
     381   fep_rats    =  1.       ! Fep/Fer ratio from sed sources  
     382   fep_rath    =  1.       ! Fep/Fer ratio from sed hydro sources  
     383   lgw_rath    =  0.5      ! Weak ligand ratio from sed hydro sources  
     384/ 
     385!----------------------------------------------------------------------- 
     386&nampislig      !  Namelist parameters for ligands, nampislig 
     387!----------------------------------------------------------------------- 
     388   rfep        =  0.001    ! Dissolution rate of FeP 
     389   rlgw        =  1.       ! Lifetime (years) of weak ligands 
     390   rlig        =  1.E-4    ! Remin ligand production per unit C 
     391   prlgw       =  1.E-4    ! Photolysis of weak ligand 
     392   rlgs        =  1000.    ! Lifetime (years) of strong ligands 
     393/ 
     394!----------------------------------------------------------------------- 
    209395&nampisice      !  Prescribed sea ice tracers 
    210 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     396!----------------------------------------------------------------------- 
    211397! constant ocean tracer concentrations are defined in trcice_pisces.F90 (Global, Arctic, Antarctic and Baltic) 
    212398! trc_ice_ratio     * betw 0 and 1: prescribed ice/ocean tracer concentration ratio 
     
    219405! cn_trc_o          * 'GL' use global ocean values making the Baltic distinction only 
    220406!                     'AA' use specific Arctic/Antarctic/Baltic values 
    221 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     407!----------------------------------------------------------------------- 
    222408!    sn_tri_ ! trc_ice_ratio ! trc_ice_prescr !     cn_trc_o 
    223409   sn_tri_dic =           -1.,           -99.,          'AA' 
     
    247433   sn_tri_nh4 =            1.,           -99.,          'AA' 
    248434/ 
    249 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    250 &nampiskrp     !   Kriest parameterization : parameters     "key_kriest" 
    251 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    252    xkr_eta      = 1.17    ! Sinking  exponent 
    253    xkr_zeta     = 2.28    ! N content exponent 
    254    xkr_ncontent = 5.7E-6  ! N content factor 
    255    xkr_mass_min = 0.0002  ! Minimum mass for Aggregates 
    256    xkr_mass_max = 1.      ! Maximum mass for Aggregates 
    257 / 
    258 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    259 &nampiskrs     !   Kriest parameterization : size classes  "key_kriest" 
    260 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    261    xkr_sfact    = 942.    ! Sinking factor 
    262    xkr_stick    = 0.5     ! Stickiness 
    263    xkr_nnano    = 2.337   ! Nbr of cell in nano size class 
    264    xkr_ndiat    = 3.718   ! Nbr of cell in diatoms size class 
    265    xkr_nmeso    = 7.147   ! Nbr of cell in mesozoo size class 
    266    xkr_naggr    = 9.877   ! Nbr of cell in aggregates  size class 
    267 / 
    268 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    269 &nampisdia     !   additional 2D/3D tracers diagnostics  
    270 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    271 !              !    name   !           title of the field          !     units      ! 
    272 !              !           !                                       !                !   
    273    pisdia2d(1)  = 'Cflx     ' , 'DIC flux                          ',  'molC/m2/s    ' 
    274    pisdia2d(2)  = 'Oflx     ' , 'Oxygen flux                       ',  'molC/m2/s    ' 
    275    pisdia2d(3)  = 'Kg       ' , 'Gas transfer                      ',  'mol/m2/s/uatm' 
    276    pisdia2d(4)  = 'Delc     ' , 'Delta CO2                         ',  'uatm         ' 
    277    pisdia2d(5)  = 'PMO      ' , 'POC export                        ',  'molC/m2/s    ' 
    278    pisdia2d(6)  = 'PMO2     ' , 'GOC export                        ',  'molC/m2/s    ' 
    279    pisdia2d(7)  = 'ExpFe1   ' , 'Nano iron export                  ',  'molFe/m2/s   ' 
    280    pisdia2d(8)  = 'ExpFe2   ' , 'Diatoms iron export               ',  'molFe/m2/s   ' 
    281    pisdia2d(9)  = 'ExpSi    ' , 'Silicate export                   ',  'molSi/m2/s   ' 
    282    pisdia2d(10) = 'ExpCaCO3 ' , 'Calcite export                    ',  'molC/m2/s    ' 
    283    pisdia2d(11) = 'heup     ' , 'euphotic layer depth              ',  'm            ' 
    284    pisdia2d(12) = 'Fedep    ' , 'Iron dep                          ',  'molFe/m2/s   ' 
    285    pisdia2d(13) = 'Nfix     ' , 'Nitrogen Fixation                 ',  'molN/m2/s    ' 
    286    pisdia3d(1)  = 'PH       ' , 'PH                                ',  '-            ' 
    287    pisdia3d(2)  = 'CO3      ' , 'Bicarbonates                      ',  'mol/l        ' 
    288    pisdia3d(3)  = 'CO3sat   ' , 'CO3 saturation                    ',  'mol/l        ' 
    289    pisdia3d(4)  = 'PAR      ' , 'light penetration                 ',  'W/m2         ' 
    290    pisdia3d(5)  = 'PPPHY    ' , 'Primary production of nanophyto   ',  'molC/m3/s    ' 
    291    pisdia3d(6)  = 'PPPHY2   ' , 'Primary production of diatoms     ',  'molC/m3/s    ' 
    292    pisdia3d(7)  = 'PPNEWN   ' , 'New Primary production of nano    ',  'molC/m3/s    ' 
    293    pisdia3d(8)  = 'PPNEWD   ' , 'New Primary production of diat    ',  'molC/m3/s    ' 
    294    pisdia3d(9)  = 'PBSi     ' , 'Primary production of Si diatoms  ',  'molSi/m3/s   ' 
    295    pisdia3d(10) = 'PFeN     ' , 'Primary production of nano iron   ',  'molFe/m3/s   ' 
    296    pisdia3d(11) = 'PFeD     ' , 'Primary production of diatoms iron',  'molFe/m3/s   ' 
    297 / 
    298 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     435!----------------------------------------------------------------------- 
    299436&nampisdmp     !  Damping  
    300 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     437!----------------------------------------------------------------------- 
    301438   ln_pisdmp    =  .true.     !  Relaxation fo some tracers to a mean value 
    302439   nn_pisdmp    =  5475       !  Frequency of Relaxation  
    303440/ 
    304 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     441!----------------------------------------------------------------------- 
    305442&nampismass     !  Mass conservation 
    306 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     443!----------------------------------------------------------------------- 
    307444   ln_check_mass =  .false.    !  Check mass conservation 
    308445/ 
     
    317454!!              7  - general coefficients                       (namlobrat) 
    318455!!              8  - optical parameters                         (namlobopt) 
    319  
    320 !!              10 - biological diagnostics trends              (namlobdbi)  
    321456!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    322 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     457!----------------------------------------------------------------------- 
    323458&namlobphy     !   biological parameters for phytoplankton 
    324 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     459!----------------------------------------------------------------------- 
    325460   tmumax  =  1.21e-5   ! maximal phytoplankton growth rate            [s-1]  
    326461   rgamma  =  0.05      ! phytoplankton exudation fraction             [%] 
     
    329464   aki     =  33.       ! light photosynthesis half saturation constant[W/m2] 
    330465/ 
    331 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     466!----------------------------------------------------------------------- 
    332467&namlobnut     !   biological parameters for nutrients 
    333 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     468!----------------------------------------------------------------------- 
    334469   akno3   =  0.7       ! nitrate limitation half-saturation value     [mmol/m3] 
    335470   aknh4   =  0.001     ! ammonium limitation half-saturation value    [mmol/m3] 
     
    337472   psinut  =  3.        ! inhibition of nitrate uptake by ammonium 
    338473/ 
    339 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     474!----------------------------------------------------------------------- 
    340475&namlobzoo     !   biological parameters for zooplankton 
    341 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     476!----------------------------------------------------------------------- 
    342477   rppz    = 0.8        ! zooplankton nominal preference for phytoplancton food  [%] 
    343478   taus    = 9.26E-6    ! specific zooplankton maximal grazing rate              [s-1]  
     
    351486   tmminz  = 2.31e-6    ! minimal zooplankton mortality rate                     [(mmolN/m3)-1 d-1] 
    352487/ 
    353 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     488!----------------------------------------------------------------------- 
    354489&namlobdet     !   biological parameters for detritus 
    355 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     490!----------------------------------------------------------------------- 
    356491   taudn   = 5.80e-7    ! detritus breakdown rate                        [0.1/86400 s-1=10 days] 
    357492   fdetlab = 0.         ! NH4 fraction of detritus dissolution            
    358493/ 
    359 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     494!----------------------------------------------------------------------- 
    360495&namlobdom     !   biological parameters for DOM 
    361 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     496!----------------------------------------------------------------------- 
    362497   taudomn = 6.43e-8    ! DOM breakdown rate                             [s-1]  
    363498!                       ! slow remineralization rate of semi-labile dom to nh4 (1 month) 
    364499/ 
    365 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     500!----------------------------------------------------------------------- 
    366501&namlobsed     !   parameters from aphotic layers to sediment 
    367 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     502!----------------------------------------------------------------------- 
    368503   sedlam     = 3.86e-7    ! time coefficient of POC remineralization in sediments [s-1] 
    369504   sedlostpoc = 0.         ! mass of POC lost in sediments 
     
    371506   xhr        = -0.858     ! coeff for martin''s remineralisation profile 
    372507/ 
    373 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     508!----------------------------------------------------------------------- 
    374509&namlobrat     !   general coefficients 
    375 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     510!----------------------------------------------------------------------- 
    376511   rcchl   = 60.       ! Carbone/Chlorophyl ratio                     [mgC.mgChla-1] 
    377512   redf    = 6.56       ! redfield ratio (C:N) for phyto 
    378513   reddom  = 6.56       ! redfield ratio (C:N) for DOM 
    379514/ 
    380 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
     515!----------------------------------------------------------------------- 
    381516&namlobopt     !   optical parameters 
    382 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
     517!----------------------------------------------------------------------- 
    383518   xkg0   = 0.0232     ! green absorption coefficient of water 
    384519   xkr0   = 0.225      ! red absorption coefficent of water 
     
    389524   rpig   = 0.7        ! chla/chla+pheo ratio 
    390525/ 
    391 !''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    392 &nampisdbi     !   biological diagnostics trends      
    393 !,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 
    394 !                !  2D bio diagnostics   units : mmole/m2/s   ("key_trdmld_trc") 
    395 !                !  name    !       title of the field      !     units      ! 
    396    pisdiabio(1)  = 'NO3PHY' , 'Flux from NO3 to PHY          ',  'mmole/m3/s' 
    397    pisdiabio(2)  = 'NH4PHY' , 'Flux from NH4 to PHY          ',  'mmole/m3/s' 
    398    pisdiabio(3)  = 'PHYNH4' , 'Flux from PHY to NH4          ',  'mmole/m3/s' 
    399    pisdiabio(4)  = 'PHYDOM' , 'Flux from PHY to DOM          ',  'mmole/m3/s' 
    400    pisdiabio(5)  = 'PHYZOO' , 'Flux from PHY to ZOO          ',  'mmole/m3/s' 
    401    pisdiabio(6)  = 'PHYDET' , 'Flux from PHY to DET          ',  'mmole/m3/s' 
    402    pisdiabio(7)  = 'DETZOO' , 'Flux from DET to ZOO          ',  'mmole/m3/s' 
    403    pisdiabio(8)  = 'DETSED' , 'Flux from DET to SED          ',  'mmole/m3/s' 
    404    pisdiabio(9)  = 'ZOODET' , 'Flux from ZOO to DET          ',  'mmole/m3/s' 
    405    pisdiabio(10)  = 'ZOOBOD' , 'Zooplankton closure          ',  'mmole/m3/s' 
    406    pisdiabio(11)  = 'ZOONH4' , 'Flux from ZOO to NH4         ',  'mmole/m3/s' 
    407    pisdiabio(12)  = 'ZOODOM' , 'Flux from ZOO to DOM         ',  'mmole/m3/s' 
    408    pisdiabio(13)  = 'NH4NO3' , 'Flux from NH4 to NO3         ',  'mmole/m3/s' 
    409    pisdiabio(14)  = 'DOMNH4' , 'Flux from DOM to NH4         ',  'mmole/m3/s' 
    410    pisdiabio(15)  = 'DETNH4' , 'Flux from DET to NH4         ',  'mmole/m3/s' 
    411    pisdiabio(16)  = 'DETDOM' , 'Flux from DET to DOM         ',  'mmole/m3/s' 
    412    pisdiabio(17)  = 'SEDNO3' , 'NO3 remineralization from SED',  'mmole/m3/s' 
    413 / 
  • branches/2016/dev_merge_2016/NEMOGCM/CONFIG/SHARED/namelist_ref

    r6497 r7403  
    288288   ln_apr_dyn  = .false.   !  Patm gradient added in ocean & ice Eqs.   (T => fill namsbc_apr ) 
    289289   ln_isf      = .false.   !  ice shelf                                 (T   => fill namsbc_isf) 
    290    ln_wave     = .false.   !  coupling with surface wave                (T => fill namsbc_wave) 
     290   ln_wave     = .false.   !  Activate coupling with wave  (T => fill namsbc_wave) 
     291   ln_cdgw     = .false.   !  Neutral drag coefficient read from wave model (T => ln_wave=.true. & fill namsbc_wave) 
     292   ln_sdw      = .false.   !  Read 2D Surf Stokes Drift & Computation of 3D stokes drift (T => ln_wave=.true. & fill namsbc_wave)  
     293   ln_tauoc    = .false.   !  Activate ocean stress modified by external wave induced stress (T => ln_wave=.true. & fill namsbc_wave) 
     294   ln_stcor    = .false.   !  Activate Stokes Coriolis term (T => ln_wave=.true. & ln_sdw=.true. & fill namsbc_wave) 
    291295   nn_lsm      = 0         !  =0 land/sea mask for input fields is not applied (keep empty land/sea mask filename field) , 
    292296                           !  =1:n number of iterations of land/sea mask application for input fields (fill land/sea mask filename field) 
     
    380384   sn_snd_crt    =   'none'                 ,    'no'    , 'spherical' , 'eastward-northward' ,  'T' 
    381385   sn_snd_co2    =   'coupled'              ,    'no'    ,     ''      ,         ''           ,   '' 
     386   sn_snd_crtw   =       'none'                 ,    'no'    ,     ''      ,         ''           , 'U,V' 
     387   sn_snd_ifrac  =       'none'                 ,    'no'    ,     ''      ,         ''           ,   '' 
     388   sn_snd_wlev   =       'coupled'              ,    'no'    ,     ''      ,         ''           ,   '' 
    382389! receive 
    383390   sn_rcv_w10m   =   'none'                 ,    'no'    ,     ''      ,         ''          ,   '' 
     
    391398   sn_rcv_cal    =   'coupled'              ,    'no'    ,     ''      ,         ''          ,   '' 
    392399   sn_rcv_co2    =   'coupled'              ,    'no'    ,     ''      ,         ''          ,   '' 
     400   sn_rcv_hsig   =       'none'                 ,    'no'    ,     ''      ,         ''          ,   '' 
     401   sn_rcv_iceflx =       'none'                 ,    'no'    ,     ''      ,         ''          ,   '' 
     402   sn_rcv_mslp   =       'none'                 ,    'no'    ,     ''      ,         ''          ,   '' 
     403   sn_rcv_phioc  =       'none'                 ,    'no'    ,     ''      ,         ''          ,   '' 
     404   sn_rcv_sdrfx  =       'none'                 ,    'no'    ,     ''      ,         ''          ,   '' 
     405   sn_rcv_sdrfy  =       'none'                 ,    'no'    ,     ''      ,         ''          ,   '' 
     406   sn_rcv_wper   =       'none'                 ,    'no'    ,     ''      ,         ''          ,   '' 
     407   sn_rcv_wnum   =       'none'                 ,    'no'    ,     ''      ,         ''          ,   '' 
     408   sn_rcv_wstrf  =       'none'                 ,    'no'    ,     ''      ,         ''          ,   '' 
     409   sn_rcv_wdrag  =       'none'                 ,    'no'    ,     ''      ,         ''          ,   '' 
    393410! 
    394411   nn_cplmodel   =     1   !  Maximum number of models to/from which NEMO is potentialy sending/receiving data 
     
    535552/ 
    536553!----------------------------------------------------------------------- 
    537 &namsbc_wave   ! External fields from wave model                        (ln_wave=T) 
    538 !----------------------------------------------------------------------- 
    539 !              ! file name ! frequency (hours) ! variable    ! time interp.!  clim  ! 'yearly'/ ! weights  ! rotation ! land/sea mask ! 
    540 !              !           !  (if <0  months)  !   name      !  (logical)  !  (T/F) ! 'monthly' ! filename ! pairing  ! filename      ! 
    541    sn_cdg      = 'cdg_wave',        1          , 'drag_coeff',   .true.    , .false., 'daily'   ,    ''      , ''       , '' 
    542    sn_usd      = 'sdw_wave',        1          , 'u_sd2d'    ,   .true.    , .false., 'daily'   ,    ''      , ''       , '' 
    543    sn_vsd      = 'sdw_wave',        1          , 'v_sd2d'    ,   .true.    , .false., 'daily'   ,    ''      , ''       , '' 
    544    sn_wn       = 'sdw_wave',        1          , 'wave_num'  ,   .true.    , .false., 'daily'   ,    ''      , ''       , '' 
    545 ! 
    546    cn_dir_cdg  = './'      !  root directory for the location of drag coefficient files 
    547    ln_cdgw     = .false.   !  Neutral drag coefficient read from wave model 
    548    ln_sdw      = .false.   !  Computation of 3D stokes drift                
     554&namsbc_wave   ! External fields from wave model 
     555!----------------------------------------------------------------------- 
     556!              !  file name  ! frequency (hours) ! variable     ! time interp. !  clim   ! 'yearly'/ ! weights  ! rotation ! land/sea mask ! 
     557!              !             !  (if <0  months)  !   name       !   (logical)  !  (T/F)  ! 'monthly' ! filename ! pairing  ! filename      ! 
     558   sn_cdg      =  'sdw_wave' ,        1          , 'drag_coeff' ,     .true.   , .false. , 'daily'   ,  ''      , ''       , '' 
     559   sn_usd      =  'sdw_wave' ,        1          , 'u_sd2d'     ,     .true.   , .false. , 'daily'   ,  ''      , ''       , '' 
     560   sn_vsd      =  'sdw_wave' ,        1          , 'v_sd2d'     ,     .true.   , .false. , 'daily'   ,  ''      , ''       , '' 
     561   sn_swh      =  'sdw_wave' ,        1          , 'hs'         ,     .true.   , .false. , 'daily'   ,  ''      , ''       , '' 
     562   sn_wmp      =  'sdw_wave' ,        1          , 'wmp'        ,     .true.   , .false. , 'daily'   ,  ''      , ''       , '' 
     563   sn_wnum     =  'sdw_wave' ,        1          , 'wave_num'   ,     .true.   , .false. , 'daily'   ,  ''      , ''       , '' 
     564   sn_tauoc    =  'sdw_wave' ,        1          , 'wave_stress',     .true.   , .false. , 'daily'   ,  ''      , ''       , '' 
     565! 
     566   cn_dir  = './'  !  root directory for the location of drag coefficient files 
    549567/ 
    550568!----------------------------------------------------------------------- 
     
    973991   ln_zdfexp   = .false.   !  time-stepping: split-explicit (T) or implicit (F) time stepping 
    974992      nn_zdfexp   =    3        ! number of sub-timestep for ln_zdfexp=T 
     993   ln_zdfqiao  = .false.   !  Enhanced wave vertical mixing Qiao (2010) (T => ln_wave=.true. & ln_sdw=.true. & fill namsbc_wave) 
    975994/ 
    976995!----------------------------------------------------------------------- 
  • branches/2016/dev_merge_2016/NEMOGCM/CONFIG/SHARED/namelist_top_ref

    r6403 r7403  
    88!!               - tracer newtonian damping              (namtrc_dmp) 
    99!!               - dynamical tracer trends               (namtrc_trd) 
    10 !!               - tracer output diagonstics             (namtrc_dia) 
    1110!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    1211!----------------------------------------------------------------------- 
     
    1413!----------------------------------------------------------------------- 
    1514   nn_dttrc      =  1        !  time step frequency for passive sn_tracers 
    16    nn_writetrc   =  5475     !  time step frequency for sn_tracer outputs 
    1715   ln_top_euler  = .false.   !  use Euler time-stepping for TOP 
    1816   ln_rsttr      = .false.   !  start from a restart file (T) or not (F) 
     
    2826&namtrc          !   tracers definition 
    2927!----------------------------------------------------------------------- 
    30    ln_trcdta     =   .true.  !  Initialisation from data input file (T) or not (F) 
     28   jp_bgc        =  0           !  Number of passive tracers of the BGC model 
     29! 
     30   ln_pisces     =  .false.     !  Run PISCES BGC model  
     31   ln_my_trc     =  .false.     !  Run MY_TRC BGC model 
     32   ln_age        =  .false.     !  Run the sea water age tracer 
     33   ln_cfc11      =  .false.     !  Run the CFC11 passive tracer 
     34   ln_cfc12      =  .false.     !  Run the CFC12 passive tracer 
     35   ln_sf6        =  .false.     !  Run the SF6 passive tracer 
     36   ln_c14        =  .false.     !  Run the Radiocarbon passive tracer 
     37! 
     38   ln_trcdta     =  .false.  !  Initialisation from data input file (T) or not (F) 
    3139   ln_trcdmp     =  .false.  !  add a damping termn (T) or not (F) 
    3240   ln_trcdmp_clo =  .false.  !  damping term (T) or not (F) on closed seas 
     41! 
     42   jp_dia3d      = 0         ! Number of 3D diagnostic variables 
     43   jp_dia2d      = 0         ! Number of 2D diagnostic variables 
     44!                !           !                                         !            !                               ! 
     45!                !    name   !           title of the field            !   units    ! initial data from file or not !  
     46!  sn_tracer(1)  = 'tracer  ' , 'Tracer  Concentration                 ',   ' - '    ,           .false. 
     47/ 
     48!----------------------------------------------------------------------- 
     49&namage         !   AGE  
     50!----------------------------------------------------------------------- 
     51   rn_age_depth      = 10            ! depth over which age tracer reset to zero 
     52   rn_age_kill_rate  = -0.000138888  !  = -1/7200 recip of relaxation timescale (s) for  age tracer shallower than age_depth 
    3353/ 
    3454!----------------------------------------------------------------------- 
     
    3656!----------------------------------------------------------------------- 
    3757   cn_dir        =  './'     !  root directory for the location of the data files 
     58!          !  file name  ! frequency (hours) ! variable  ! time interp. !  clim  ! 'yearly'/ ! weights  ! rotation ! land/sea mask ! 
     59!          !             !  (if <0  months)  !   name    !   (logical)  !  (T/F) ! 'monthly' ! filename ! pairing  ! filename      ! 
     60   sn_trcdta(1)  = 'data_TRC_nomask'        ,        -12        ,  'TRC'     ,    .false.   , .true. , 'yearly'  , ''       , ''   , '' 
    3861/ 
    3962!----------------------------------------------------------------------- 
     
    111134   ln_trdtrc(23) = .true. 
    112135/ 
    113 !----------------------------------------------------------------------- 
    114 &namtrc_dia      !   parameters for passive tracer additional diagnostics 
    115 !---------------------------------------------------------------------- 
    116    ln_diatrc     =  .true.   !  save additional diag. (T) or not (F) 
    117    ln_diabio     =  .true.   !  output biological trends 
    118    nn_writedia   =  5475     !  time step frequency for diagnostics 
    119    nn_writebio   =    10     !  frequency of biological outputs 
    120 / 
    121136!---------------------------------------------------------------------- 
    122137&namtrc_bc       !   data for boundary conditions 
     
    125140   cn_dir_cbc    =  './'     !  root directory for the location of COASTAL data files 
    126141   cn_dir_obc    =  './'     !  root directory for the location of OPEN data files 
     142   ln_rnf_ctl    = .false.   !  Remove runoff dilution on tracers with absent river load 
     143   rn_bc_time    =  86400.   !  Time scaling factor for SBC and CBC data (seconds in a day) 
    127144/ 
    128145!---------------------------------------------------------------------- 
  • branches/2016/dev_merge_2016/NEMOGCM/CONFIG/cfg.txt

    r6403 r7403  
    1111GYRE OPA_SRC 
    1212ORCA2_LIM_PISCES OPA_SRC LIM_SRC_2 NST_SRC TOP_SRC 
     13ORCA2_LIM3_TRC OPA_SRC LIM_SRC_3 NST_SRC TOP_SRC 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/LIM_SRC_3/limistate.F90

    r6695 r7403  
    313313 
    314314                  IF(lwp) THEN  
    315                      WRITE(numout,*) ' ztests : ', ztests 
    316315                     IF( ztests .NE. 4 )THEN 
    317316                        WRITE(numout,*) 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/DIA/diaar5.F90

    r6665 r7403  
    66   !! History :  3.2  !  2009-11  (S. Masson)  Original code 
    77   !!            3.3  !  2010-10  (C. Ethe, G. Madec) reorganisation of initialisation phase + merge TRC-TRA 
    8    !!---------------------------------------------------------------------- 
    9 #if defined key_diaar5 
    10    !!---------------------------------------------------------------------- 
    11    !!   'key_diaar5'  :                           activate ar5 diagnotics 
    128   !!---------------------------------------------------------------------- 
    139   !!   dia_ar5       : AR5 diagnostics 
     
    2420   USE phycst         ! physical constant 
    2521   USE in_out_manager  ! I/O manager 
     22   USE zdfddm 
     23   USE zdf_oce 
    2624 
    2725   IMPLICIT NONE 
     
    2927 
    3028   PUBLIC   dia_ar5        ! routine called in step.F90 module 
    31    PUBLIC   dia_ar5_init   ! routine called in opa.F90 module 
    3229   PUBLIC   dia_ar5_alloc  ! routine called in nemogcm.F90 module 
    33  
    34    LOGICAL, PUBLIC, PARAMETER :: lk_diaar5 = .TRUE.   ! coupled flag 
     30   PUBLIC   dia_ar5_hst    ! heat/salt transport 
    3531 
    3632   REAL(wp)                         ::   vol0         ! ocean volume (interior domain) 
     
    3935   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:  ) ::   thick0       ! ocean thickness (interior domain) 
    4036   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sn0          ! initial salinity 
     37 
     38   LOGICAL  :: l_ar5 
    4139       
     40   !! * Substitutions 
     41#  include "zdfddm_substitute.h90" 
     42#  include "vectopt_loop_substitute.h90" 
    4243   !!---------------------------------------------------------------------- 
    4344   !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     
    7374      INTEGER  ::   ji, jj, jk                      ! dummy loop arguments 
    7475      REAL(wp) ::   zvolssh, zvol, zssh_steric, zztmp, zarho, ztemp, zsal, zmass 
     76      REAL(wp) ::   zaw, zbw, zrw 
    7577      ! 
    7678      REAL(wp), POINTER, DIMENSION(:,:)     :: zarea_ssh , zbotpres       ! 2D workspace  
     79      REAL(wp), POINTER, DIMENSION(:,:)     :: zpe                         ! 2D workspace  
    7780      REAL(wp), POINTER, DIMENSION(:,:,:)   :: zrhd , zrhop               ! 3D workspace 
    7881      REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztsn                       ! 4D workspace 
     
    8083      IF( nn_timing == 1 )   CALL timing_start('dia_ar5') 
    8184  
    82       CALL wrk_alloc( jpi , jpj              , zarea_ssh , zbotpres ) 
    83       CALL wrk_alloc( jpi , jpj , jpk        , zrhd      , zrhop    ) 
    84       CALL wrk_alloc( jpi , jpj , jpk , jpts , ztsn                 ) 
    85  
    86       zarea_ssh(:,:) = area(:,:) * sshn(:,:) 
    87  
    88       !                                         ! total volume of liquid seawater 
    89       zvolssh = SUM( zarea_ssh(:,:) )  
    90       IF( lk_mpp )   CALL mpp_sum( zvolssh ) 
    91       zvol = vol0 + zvolssh 
     85      IF( kt == nit000 )     CALL dia_ar5_init 
     86 
     87      IF( l_ar5 ) THEN 
     88         CALL wrk_alloc( jpi , jpj              , zarea_ssh , zbotpres ) 
     89         CALL wrk_alloc( jpi , jpj , jpk        , zrhd      , zrhop    ) 
     90         CALL wrk_alloc( jpi , jpj , jpk , jpts , ztsn                 ) 
     91         zarea_ssh(:,:) = area(:,:) * sshn(:,:) 
     92      ENDIF 
     93      ! 
     94      IF( iom_use( 'voltot' ) .OR. iom_use( 'sshtot' )  .OR. iom_use( 'sshdyn' )  ) THEN     
     95         !                                         ! total volume of liquid seawater 
     96         zvolssh = SUM( zarea_ssh(:,:) )  
     97         IF( lk_mpp )   CALL mpp_sum( zvolssh ) 
     98         zvol = vol0 + zvolssh 
    9299       
    93       CALL iom_put( 'voltot', zvol               ) 
    94       CALL iom_put( 'sshtot', zvolssh / area_tot ) 
    95  
    96       !                      
    97       ztsn(:,:,:,jp_tem) = tsn(:,:,:,jp_tem)                    ! thermosteric ssh 
    98       ztsn(:,:,:,jp_sal) = sn0(:,:,:) 
    99       CALL eos( ztsn, zrhd, gdept_n(:,:,:) )                       ! now in situ density using initial salinity 
    100       ! 
    101       zbotpres(:,:) = 0._wp                        ! no atmospheric surface pressure, levitating sea-ice 
    102       DO jk = 1, jpkm1 
    103          zbotpres(:,:) = zbotpres(:,:) + e3t_n(:,:,jk) * zrhd(:,:,jk) 
    104       END DO 
    105       IF( ln_linssh ) THEN 
    106          IF( ln_isfcav ) THEN 
    107             DO ji=1,jpi 
    108                DO jj=1,jpj 
    109                   zbotpres(ji,jj) = zbotpres(ji,jj) + sshn(ji,jj) * zrhd(ji,jj,mikt(ji,jj)) + riceload(ji,jj) 
    110                END DO 
    111             END DO 
    112          ELSE 
    113             zbotpres(:,:) = zbotpres(:,:) + sshn(:,:) * zrhd(:,:,1) 
    114          END IF 
     100         CALL iom_put( 'voltot', zvol               ) 
     101         CALL iom_put( 'sshtot', zvolssh / area_tot ) 
     102         CALL iom_put( 'sshdyn', sshn(:,:) - (zvolssh / area_tot) ) 
     103         ! 
     104      ENDIF 
     105 
     106      IF( iom_use( 'botpres' ) .OR. iom_use( 'sshthster' )  .OR. iom_use( 'sshsteric' )  ) THEN     
     107         !                      
     108         ztsn(:,:,:,jp_tem) = tsn(:,:,:,jp_tem)                    ! thermosteric ssh 
     109         ztsn(:,:,:,jp_sal) = sn0(:,:,:) 
     110         CALL eos( ztsn, zrhd, gdept_n(:,:,:) )                       ! now in situ density using initial salinity 
     111         ! 
     112         zbotpres(:,:) = 0._wp                        ! no atmospheric surface pressure, levitating sea-ice 
     113         DO jk = 1, jpkm1 
     114            zbotpres(:,:) = zbotpres(:,:) + e3t_n(:,:,jk) * zrhd(:,:,jk) 
     115         END DO 
     116         IF( ln_linssh ) THEN 
     117            IF( ln_isfcav ) THEN 
     118               DO ji = 1, jpi 
     119                  DO jj = 1, jpj 
     120                     zbotpres(ji,jj) = zbotpres(ji,jj) + sshn(ji,jj) * zrhd(ji,jj,mikt(ji,jj)) + riceload(ji,jj) 
     121                  END DO 
     122               END DO 
     123            ELSE 
     124               zbotpres(:,:) = zbotpres(:,:) + sshn(:,:) * zrhd(:,:,1) 
     125            END IF 
    115126!!gm 
    116127!!gm   riceload should be added in both ln_linssh=T or F, no? 
    117128!!gm 
    118       END IF 
    119       !                                          
    120       zarho = SUM( area(:,:) * zbotpres(:,:) )  
    121       IF( lk_mpp )   CALL mpp_sum( zarho ) 
    122       zssh_steric = - zarho / area_tot 
    123       CALL iom_put( 'sshthster', zssh_steric ) 
     129         END IF 
     130         !                                          
     131         zarho = SUM( area(:,:) * zbotpres(:,:) )  
     132         IF( lk_mpp )   CALL mpp_sum( zarho ) 
     133         zssh_steric = - zarho / area_tot 
     134         CALL iom_put( 'sshthster', zssh_steric ) 
    124135       
    125       !                                         ! steric sea surface height 
    126       CALL eos( tsn, zrhd, zrhop, gdept_n(:,:,:) )                 ! now in situ and potential density 
    127       zrhop(:,:,jpk) = 0._wp 
    128       CALL iom_put( 'rhop', zrhop ) 
    129       ! 
    130       zbotpres(:,:) = 0._wp                        ! no atmospheric surface pressure, levitating sea-ice 
     136         !                                         ! steric sea surface height 
     137         CALL eos( tsn, zrhd, zrhop, gdept_n(:,:,:) )                 ! now in situ and potential density 
     138         zrhop(:,:,jpk) = 0._wp 
     139         CALL iom_put( 'rhop', zrhop ) 
     140         ! 
     141         zbotpres(:,:) = 0._wp                        ! no atmospheric surface pressure, levitating sea-ice 
     142         DO jk = 1, jpkm1 
     143            zbotpres(:,:) = zbotpres(:,:) + e3t_n(:,:,jk) * zrhd(:,:,jk) 
     144         END DO 
     145         IF( ln_linssh ) THEN 
     146            IF ( ln_isfcav ) THEN 
     147               DO ji = 1,jpi 
     148                  DO jj = 1,jpj 
     149                     zbotpres(ji,jj) = zbotpres(ji,jj) + sshn(ji,jj) * zrhd(ji,jj,mikt(ji,jj)) + riceload(ji,jj) 
     150                  END DO 
     151               END DO 
     152            ELSE 
     153               zbotpres(:,:) = zbotpres(:,:) + sshn(:,:) * zrhd(:,:,1) 
     154            END IF 
     155         END IF 
     156         !     
     157         zarho = SUM( area(:,:) * zbotpres(:,:) )  
     158         IF( lk_mpp )   CALL mpp_sum( zarho ) 
     159         zssh_steric = - zarho / area_tot 
     160         CALL iom_put( 'sshsteric', zssh_steric ) 
     161       
     162         !                                         ! ocean bottom pressure 
     163         zztmp = rau0 * grav * 1.e-4_wp               ! recover pressure from pressure anomaly and cover to dbar = 1.e4 Pa 
     164         zbotpres(:,:) = zztmp * ( zbotpres(:,:) + sshn(:,:) + thick0(:,:) ) 
     165         CALL iom_put( 'botpres', zbotpres ) 
     166         ! 
     167      ENDIF 
     168 
     169      IF( iom_use( 'masstot' ) .OR. iom_use( 'temptot' )  .OR. iom_use( 'saltot' )  ) THEN     
     170         !                                         ! Mean density anomalie, temperature and salinity 
     171         ztemp = 0._wp 
     172         zsal  = 0._wp 
     173         DO jk = 1, jpkm1 
     174            DO jj = 1, jpj 
     175               DO ji = 1, jpi 
     176                  zztmp = area(ji,jj) * e3t_n(ji,jj,jk) 
     177                  ztemp = ztemp + zztmp * tsn(ji,jj,jk,jp_tem) 
     178                  zsal  = zsal  + zztmp * tsn(ji,jj,jk,jp_sal) 
     179               END DO 
     180            END DO 
     181         END DO 
     182         IF( ln_linssh ) THEN 
     183            IF( ln_isfcav ) THEN 
     184               DO ji = 1, jpi 
     185                  DO jj = 1, jpj 
     186                     ztemp = ztemp + zarea_ssh(ji,jj) * tsn(ji,jj,mikt(ji,jj),jp_tem)  
     187                     zsal  = zsal  + zarea_ssh(ji,jj) * tsn(ji,jj,mikt(ji,jj),jp_sal)  
     188                  END DO 
     189               END DO 
     190            ELSE 
     191               ztemp = ztemp + SUM( zarea_ssh(:,:) * tsn(:,:,1,jp_tem) ) 
     192               zsal  = zsal  + SUM( zarea_ssh(:,:) * tsn(:,:,1,jp_sal) ) 
     193            END IF 
     194         ENDIF 
     195         IF( lk_mpp ) THEN   
     196            CALL mpp_sum( ztemp ) 
     197            CALL mpp_sum( zsal  ) 
     198         END IF 
     199         ! 
     200         zmass = rau0 * ( zarho + zvol )                 ! total mass of liquid seawater 
     201         ztemp = ztemp / zvol                            ! potential temperature in liquid seawater 
     202         zsal  = zsal  / zvol                            ! Salinity of liquid seawater 
     203         ! 
     204         CALL iom_put( 'masstot', zmass ) 
     205         CALL iom_put( 'temptot', ztemp ) 
     206         CALL iom_put( 'saltot' , zsal  ) 
     207         ! 
     208      ENDIF 
     209 
     210      IF( iom_use( 'tnpeo' )) THEN     
     211      ! Work done against stratification by vertical mixing 
     212      ! Exclude points where rn2 is negative as convection kicks in here and 
     213      ! work is not being done against stratification 
     214          CALL wrk_alloc( jpi, jpj, zpe ) 
     215          zpe(:,:) = 0._wp 
     216          IF( lk_zdfddm ) THEN 
     217             DO ji=1,jpi 
     218                DO jj=1,jpj 
     219                   DO jk=1,jpk 
     220                      zrw =   ( gdepw_n(ji,jj,jk  ) - gdept_n(ji,jj,jk) )   & 
     221                         &  / ( gdept_n(ji,jj,jk-1) - gdept_n(ji,jj,jk) ) 
     222                      ! 
     223                      zaw = rab_n(ji,jj,jk,jp_tem) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_tem)* zrw 
     224                      zbw = rab_n(ji,jj,jk,jp_sal) * (1. - zrw) + rab_n(ji,jj,jk-1,jp_sal)* zrw 
     225                      ! 
     226                      zpe(ji, jj) = zpe(ji, jj) - MIN(0._wp, rn2(ji,jj,jk)) * & 
     227                           &       grav * (avt(ji,jj,jk) * zaw * (tsn(ji,jj,jk-1,jp_tem) - tsn(ji,jj,jk,jp_tem) )  & 
     228                           &       - fsavs(ji,jj,jk) * zbw * (tsn(ji,jj,jk-1,jp_sal) - tsn(ji,jj,jk,jp_sal) ) ) 
     229 
     230                   ENDDO 
     231                ENDDO 
     232             ENDDO 
     233          ELSE 
     234             DO ji = 1, jpi 
     235                DO jj = 1, jpj 
     236                   DO jk = 1, jpk 
     237                       zpe(ji,jj) = zpe(ji,jj) + avt(ji, jj, jk) * MIN(0._wp,rn2(ji, jj, jk)) * rau0 * e3w_n(ji, jj, jk) 
     238                   ENDDO 
     239                ENDDO 
     240             ENDDO 
     241          ENDIF 
     242          CALL lbc_lnk( zpe, 'T', 1._wp)          
     243          CALL iom_put( 'tnpeo', zpe ) 
     244          CALL wrk_dealloc( jpi, jpj, zpe ) 
     245      ENDIF 
     246      ! 
     247      IF( l_ar5 ) THEN 
     248        CALL wrk_dealloc( jpi , jpj              , zarea_ssh , zbotpres ) 
     249        CALL wrk_dealloc( jpi , jpj , jpk        , zrhd      , zrhop    ) 
     250        CALL wrk_dealloc( jpi , jpj , jpk , jpts , ztsn                 ) 
     251      ENDIF 
     252      ! 
     253      IF( nn_timing == 1 )   CALL timing_stop('dia_ar5') 
     254      ! 
     255   END SUBROUTINE dia_ar5 
     256 
     257   SUBROUTINE dia_ar5_hst( ktra, cptr, pua, pva )  
     258      !!---------------------------------------------------------------------- 
     259      !!                    ***  ROUTINE dia_ar5_htr *** 
     260      !!---------------------------------------------------------------------- 
     261      !! Wrapper for heat transport calculations 
     262      !! Called from all advection and/or diffusion routines 
     263      !!---------------------------------------------------------------------- 
     264      INTEGER                         , INTENT(in )  :: ktra  ! tracer index 
     265      CHARACTER(len=3)                , INTENT(in)   :: cptr  ! transport type  'adv'/'ldf' 
     266      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in)   :: pua   ! 3D input array of advection/diffusion 
     267      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in)   :: pva   ! 3D input array of advection/diffusion 
     268      ! 
     269      INTEGER    ::  ji, jj, jk 
     270      REAL(wp), POINTER, DIMENSION(:,:)  :: z2d 
     271 
     272     
     273 
     274      CALL wrk_alloc( jpi, jpj, z2d ) 
     275      z2d(:,:) = pua(:,:,1)  
    131276      DO jk = 1, jpkm1 
    132          zbotpres(:,:) = zbotpres(:,:) + e3t_n(:,:,jk) * zrhd(:,:,jk) 
    133       END DO 
    134       IF( ln_linssh ) THEN 
    135          IF ( ln_isfcav ) THEN 
    136             DO ji=1,jpi 
    137                DO jj=1,jpj 
    138                   zbotpres(ji,jj) = zbotpres(ji,jj) + sshn(ji,jj) * zrhd(ji,jj,mikt(ji,jj)) + riceload(ji,jj) 
    139                END DO 
     277         DO jj = 2, jpjm1 
     278            DO ji = fs_2, fs_jpim1   ! vector opt. 
     279               z2d(ji,jj) = z2d(ji,jj) + pua(ji,jj,jk)  
    140280            END DO 
    141          ELSE 
    142             zbotpres(:,:) = zbotpres(:,:) + sshn(:,:) * zrhd(:,:,1) 
    143          END IF 
    144       END IF 
    145       !     
    146       zarho = SUM( area(:,:) * zbotpres(:,:) )  
    147       IF( lk_mpp )   CALL mpp_sum( zarho ) 
    148       zssh_steric = - zarho / area_tot 
    149       CALL iom_put( 'sshsteric', zssh_steric ) 
    150        
    151       !                                         ! ocean bottom pressure 
    152       zztmp = rau0 * grav * 1.e-4_wp               ! recover pressure from pressure anomaly and cover to dbar = 1.e4 Pa 
    153       zbotpres(:,:) = zztmp * ( zbotpres(:,:) + sshn(:,:) + thick0(:,:) ) 
    154       CALL iom_put( 'botpres', zbotpres ) 
    155  
    156       !                                         ! Mean density anomalie, temperature and salinity 
    157       ztemp = 0._wp 
    158       zsal  = 0._wp 
    159       DO jk = 1, jpkm1 
    160          DO jj = 1, jpj 
    161             DO ji = 1, jpi 
    162                zztmp = area(ji,jj) * e3t_n(ji,jj,jk) 
    163                ztemp = ztemp + zztmp * tsn(ji,jj,jk,jp_tem) 
    164                zsal  = zsal  + zztmp * tsn(ji,jj,jk,jp_sal) 
    165             END DO 
    166          END DO 
    167       END DO 
    168       IF( ln_linssh ) THEN 
    169          IF( ln_isfcav ) THEN 
    170             DO ji=1,jpi 
    171                DO jj=1,jpj 
    172                   ztemp = ztemp + zarea_ssh(ji,jj) * tsn(ji,jj,mikt(ji,jj),jp_tem)  
    173                   zsal  = zsal  + zarea_ssh(ji,jj) * tsn(ji,jj,mikt(ji,jj),jp_sal)  
    174                END DO 
    175             END DO 
    176          ELSE 
    177             ztemp = ztemp + SUM( zarea_ssh(:,:) * tsn(:,:,1,jp_tem) ) 
    178             zsal  = zsal  + SUM( zarea_ssh(:,:) * tsn(:,:,1,jp_sal) ) 
    179          END IF 
    180       ENDIF 
    181       IF( lk_mpp ) THEN   
    182          CALL mpp_sum( ztemp ) 
    183          CALL mpp_sum( zsal  ) 
    184       END IF 
    185       ! 
    186       zmass = rau0 * ( zarho + zvol )                 ! total mass of liquid seawater 
    187       ztemp = ztemp / zvol                            ! potential temperature in liquid seawater 
    188       zsal  = zsal  / zvol                            ! Salinity of liquid seawater 
    189       ! 
    190       CALL iom_put( 'masstot', zmass ) 
    191       CALL iom_put( 'temptot', ztemp ) 
    192       CALL iom_put( 'saltot' , zsal  ) 
    193       ! 
    194       CALL wrk_dealloc( jpi , jpj              , zarea_ssh , zbotpres ) 
    195       CALL wrk_dealloc( jpi , jpj , jpk        , zrhd      , zrhop    ) 
    196       CALL wrk_dealloc( jpi , jpj , jpk , jpts , ztsn                 ) 
    197       ! 
    198       IF( nn_timing == 1 )   CALL timing_stop('dia_ar5') 
    199       ! 
    200    END SUBROUTINE dia_ar5 
     281         END DO 
     282       END DO 
     283       CALL lbc_lnk( z2d, 'U', -1. ) 
     284       IF( cptr == 'adv' ) THEN 
     285          IF( ktra == jp_tem ) CALL iom_put( "uadv_heattr" , rau0_rcp * z2d )  ! advective heat transport in i-direction 
     286          IF( ktra == jp_sal ) CALL iom_put( "uadv_salttr" , rau0     * z2d )  ! advective salt transport in i-direction 
     287       ENDIF 
     288       IF( cptr == 'ldf' ) THEN 
     289          IF( ktra == jp_tem ) CALL iom_put( "udiff_heattr" , rau0_rcp * z2d ) ! diffusive heat transport in i-direction 
     290          IF( ktra == jp_sal ) CALL iom_put( "udiff_salttr" , rau0     * z2d ) ! diffusive salt transport in i-direction 
     291       ENDIF 
     292       ! 
     293       z2d(:,:) = pva(:,:,1)  
     294       DO jk = 1, jpkm1 
     295          DO jj = 2, jpjm1 
     296             DO ji = fs_2, fs_jpim1   ! vector opt. 
     297                z2d(ji,jj) = z2d(ji,jj) + pva(ji,jj,jk)  
     298             END DO 
     299          END DO 
     300       END DO 
     301       CALL lbc_lnk( z2d, 'V', -1. ) 
     302       IF( cptr == 'adv' ) THEN 
     303          IF( ktra == jp_tem ) CALL iom_put( "vadv_heattr" , rau0_rcp * z2d )  ! advective heat transport in j-direction 
     304          IF( ktra == jp_sal ) CALL iom_put( "vadv_salttr" , rau0     * z2d )  ! advective salt transport in j-direction 
     305       ENDIF 
     306       IF( cptr == 'ldf' ) THEN 
     307          IF( ktra == jp_tem ) CALL iom_put( "vdiff_heattr" , rau0_rcp * z2d ) ! diffusive heat transport in j-direction 
     308          IF( ktra == jp_sal ) CALL iom_put( "vdiff_salttr" , rau0     * z2d ) ! diffusive salt transport in j-direction 
     309       ENDIF 
     310           
     311       CALL wrk_dealloc( jpi, jpj, z2d ) 
     312 
     313   END SUBROUTINE dia_ar5_hst 
    201314 
    202315 
     
    217330      IF( nn_timing == 1 )   CALL timing_start('dia_ar5_init') 
    218331      ! 
    219       CALL wrk_alloc( jpi , jpj , jpk, jpts, zsaldta ) 
    220       !                                      ! allocate dia_ar5 arrays 
    221       IF( dia_ar5_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'dia_ar5_init : unable to allocate arrays' ) 
    222  
    223       area(:,:) = e1e2t(:,:) * tmask_i(:,:) 
    224  
    225       area_tot = SUM( area(:,:) )   ;   IF( lk_mpp )   CALL mpp_sum( area_tot ) 
    226  
    227       vol0        = 0._wp 
    228       thick0(:,:) = 0._wp 
    229       DO jk = 1, jpkm1 
    230          vol0        = vol0        + SUM( area (:,:) * tmask(:,:,jk) * e3t_0(:,:,jk) ) 
    231          thick0(:,:) = thick0(:,:) +    tmask_i(:,:) * tmask(:,:,jk) * e3t_0(:,:,jk) 
    232       END DO 
    233       IF( lk_mpp )   CALL mpp_sum( vol0 ) 
    234  
    235  
    236       CALL iom_open ( 'sali_ref_clim_monthly', inum ) 
    237       CALL iom_get  ( inum, jpdom_data, 'vosaline' , zsaldta(:,:,:,1), 1  ) 
    238       CALL iom_get  ( inum, jpdom_data, 'vosaline' , zsaldta(:,:,:,2), 12 ) 
    239       CALL iom_close( inum ) 
    240  
    241       sn0(:,:,:) = 0.5_wp * ( zsaldta(:,:,:,1) + zsaldta(:,:,:,2) )         
    242       sn0(:,:,:) = sn0(:,:,:) * tmask(:,:,:) 
    243       IF( ln_zps ) THEN               ! z-coord. partial steps 
    244          DO jj = 1, jpj               ! interpolation of salinity at the last ocean level (i.e. the partial step) 
    245             DO ji = 1, jpi 
    246                ik = mbkt(ji,jj) 
    247                IF( ik > 1 ) THEN 
    248                   zztmp = ( gdept_1d(ik) - gdept_0(ji,jj,ik) ) / ( gdept_1d(ik) - gdept_1d(ik-1) ) 
    249                   sn0(ji,jj,ik) = ( 1._wp - zztmp ) * sn0(ji,jj,ik) + zztmp * sn0(ji,jj,ik-1) 
    250                ENDIF 
     332      l_ar5 = .FALSE. 
     333      IF(   iom_use( 'voltot'  ) .OR. iom_use( 'sshtot'    )  .OR. iom_use( 'sshdyn' )  .OR.  &  
     334         &  iom_use( 'masstot' ) .OR. iom_use( 'temptot'   )  .OR. iom_use( 'saltot' ) .OR.  &     
     335         &  iom_use( 'botpres' ) .OR. iom_use( 'sshthster' )  .OR. iom_use( 'sshsteric' )  ) L_ar5 = .TRUE. 
     336   
     337      IF( l_ar5 ) THEN 
     338         ! 
     339         CALL wrk_alloc( jpi , jpj , jpk, jpts, zsaldta ) 
     340         !                                      ! allocate dia_ar5 arrays 
     341         IF( dia_ar5_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'dia_ar5_init : unable to allocate arrays' ) 
     342 
     343         area(:,:) = e1e2t(:,:) * tmask_i(:,:) 
     344 
     345         area_tot = SUM( area(:,:) )   ;   IF( lk_mpp )   CALL mpp_sum( area_tot ) 
     346 
     347         vol0        = 0._wp 
     348         thick0(:,:) = 0._wp 
     349         DO jk = 1, jpkm1 
     350            vol0        = vol0        + SUM( area (:,:) * tmask(:,:,jk) * e3t_0(:,:,jk) ) 
     351            thick0(:,:) = thick0(:,:) +    tmask_i(:,:) * tmask(:,:,jk) * e3t_0(:,:,jk) 
     352         END DO 
     353         IF( lk_mpp )   CALL mpp_sum( vol0 ) 
     354 
     355 
     356         CALL iom_open ( 'sali_ref_clim_monthly', inum ) 
     357         CALL iom_get  ( inum, jpdom_data, 'vosaline' , zsaldta(:,:,:,1), 1  ) 
     358         CALL iom_get  ( inum, jpdom_data, 'vosaline' , zsaldta(:,:,:,2), 12 ) 
     359         CALL iom_close( inum ) 
     360 
     361         sn0(:,:,:) = 0.5_wp * ( zsaldta(:,:,:,1) + zsaldta(:,:,:,2) )         
     362         sn0(:,:,:) = sn0(:,:,:) * tmask(:,:,:) 
     363         IF( ln_zps ) THEN               ! z-coord. partial steps 
     364            DO jj = 1, jpj               ! interpolation of salinity at the last ocean level (i.e. the partial step) 
     365               DO ji = 1, jpi 
     366                  ik = mbkt(ji,jj) 
     367                  IF( ik > 1 ) THEN 
     368                     zztmp = ( gdept_1d(ik) - gdept_0(ji,jj,ik) ) / ( gdept_1d(ik) - gdept_1d(ik-1) ) 
     369                     sn0(ji,jj,ik) = ( 1._wp - zztmp ) * sn0(ji,jj,ik) + zztmp * sn0(ji,jj,ik-1) 
     370                  ENDIF 
     371               END DO 
    251372            END DO 
    252          END DO 
    253       ENDIF 
    254       ! 
    255       CALL wrk_dealloc( jpi , jpj , jpk, jpts, zsaldta ) 
     373         ENDIF 
     374         ! 
     375         CALL wrk_dealloc( jpi , jpj , jpk, jpts, zsaldta ) 
     376         ! 
     377      ENDIF 
    256378      ! 
    257379      IF( nn_timing == 1 )   CALL timing_stop('dia_ar5_init') 
    258380      ! 
    259381   END SUBROUTINE dia_ar5_init 
    260  
    261 #else 
    262    !!---------------------------------------------------------------------- 
    263    !!   Default option :                                         NO diaar5 
    264    !!---------------------------------------------------------------------- 
    265    LOGICAL, PUBLIC, PARAMETER :: lk_diaar5 = .FALSE.   ! coupled flag 
    266 CONTAINS 
    267    SUBROUTINE dia_ar5_init    ! Dummy routine 
    268    END SUBROUTINE dia_ar5_init 
    269    SUBROUTINE dia_ar5( kt )   ! Empty routine 
    270       INTEGER ::   kt 
    271       WRITE(*,*) 'dia_ar5: You should not have seen this print! error?', kt 
    272    END SUBROUTINE dia_ar5 
    273 #endif 
    274382 
    275383   !!====================================================================== 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/DIA/diaptr.F90

    r6140 r7403  
    99   !!            3.3  ! 2010-10  (G. Madec)  dynamical allocation 
    1010   !!            3.6  ! 2014-12  (C. Ethe) use of IOM 
     11   !!            3.6  ! 2016-06  (T. Graham) Addition of diagnostics for CMIP6 
    1112   !!---------------------------------------------------------------------- 
    1213 
     
    3839   PUBLIC   dia_ptr_init   ! call in step module 
    3940   PUBLIC   dia_ptr        ! call in step module 
     41   PUBLIC   dia_ptr_hst    ! called from tra_ldf/tra_adv routines 
    4042 
    4143   !                                  !!** namelist  namptr  ** 
    42    REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(:) ::   htr_adv, htr_ldf   !: Heat TRansports (adv, diff, overturn.) 
    43    REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(:) ::   str_adv, str_ldf   !: Salt TRansports (adv, diff, overturn.) 
    44     
     44   REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(:,:) ::   htr_adv, htr_ldf, htr_eiv   !: Heat TRansports (adv, diff, Bolus.) 
     45   REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(:,:) ::   str_adv, str_ldf, str_eiv   !: Salt TRansports (adv, diff, Bolus.) 
     46   REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(:,:) ::   htr_ove, str_ove   !: heat Salt TRansports ( overturn.) 
     47   REAL(wp), ALLOCATABLE, SAVE, PUBLIC, DIMENSION(:,:) ::   htr_btr, str_btr   !: heat Salt TRansports ( barotropic ) 
    4548 
    4649   LOGICAL, PUBLIC ::   ln_diaptr   !  Poleward transport flag (T) or not (F) 
    4750   LOGICAL, PUBLIC ::   ln_subbas   !  Atlantic/Pacific/Indian basins calculation 
    48    INTEGER        ::   nptr        ! = 1 (l_subbas=F) or = 5 (glo, atl, pac, ind, ipc) (l_subbas=T)  
     51   INTEGER, PUBLIC ::   nptr        ! = 1 (l_subbas=F) or = 5 (glo, atl, pac, ind, ipc) (l_subbas=T)  
    4952 
    5053   REAL(wp) ::   rc_sv    = 1.e-6_wp   ! conversion from m3/s to Sverdrup 
     
    7578      ! 
    7679      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices 
    77       REAL(wp) ::   zv, zsfc               ! local scalar 
     80      REAL(wp) ::   zsfc,zvfc               ! local scalar 
    7881      REAL(wp), DIMENSION(jpi,jpj)     ::  z2d   ! 2D workspace 
    7982      REAL(wp), DIMENSION(jpi,jpj,jpk) ::  z3d   ! 3D workspace 
    8083      REAL(wp), DIMENSION(jpi,jpj,jpk) ::  zmask   ! 3D workspace 
    8184      REAL(wp), DIMENSION(jpi,jpj,jpk,jpts) ::  zts   ! 3D workspace 
    82       CHARACTER( len = 10 )  :: cl1 
     85      REAL(wp), DIMENSION(jpj)     ::  vsum   ! 1D workspace 
     86      REAL(wp), DIMENSION(jpj,jpts)     ::  tssum   ! 1D workspace 
     87  
     88      ! 
     89      !overturning calculation 
     90      REAL(wp), DIMENSION(jpj,jpk,nptr) ::   sjk  , r1_sjk ! i-mean i-k-surface and its inverse 
     91      REAL(wp), DIMENSION(jpj,jpk,nptr) ::   v_msf, sn_jk  , tn_jk ! i-mean T and S, j-Stream-Function 
     92      REAL(wp), DIMENSION(jpi,jpj,jpk) ::  zvn   ! 3D workspace 
     93 
     94 
     95      CHARACTER( len = 12 )  :: cl1 
    8396      !!---------------------------------------------------------------------- 
    8497      ! 
     
    109122            END DO 
    110123         ENDIF 
     124         IF( iom_use("sopstove") .OR. iom_use("sophtove") .OR. iom_use("sopstbtr") .OR. iom_use("sophtbtr") ) THEN 
     125            ! define fields multiplied by scalar 
     126            zmask(:,:,:) = 0._wp 
     127            zts(:,:,:,:) = 0._wp 
     128            zvn(:,:,:) = 0._wp 
     129            DO jk = 1, jpkm1 
     130               DO jj = 1, jpjm1 
     131                  DO ji = 1, jpi 
     132                     zvfc = e1v(ji,jj) * e3v_n(ji,jj,jk) 
     133                     zmask(ji,jj,jk)      = vmask(ji,jj,jk)      * zvfc 
     134                     zts(ji,jj,jk,jp_tem) = (tsn(ji,jj,jk,jp_tem)+tsn(ji,jj+1,jk,jp_tem)) * 0.5 * zvfc  !Tracers averaged onto V grid 
     135                     zts(ji,jj,jk,jp_sal) = (tsn(ji,jj,jk,jp_sal)+tsn(ji,jj+1,jk,jp_sal)) * 0.5 * zvfc 
     136                     zvn(ji,jj,jk)        = vn(ji,jj,jk)         * zvfc 
     137                  ENDDO 
     138               ENDDO 
     139             ENDDO 
     140         ENDIF 
     141         IF( iom_use("sopstove") .OR. iom_use("sophtove") ) THEN 
     142             sjk(:,:,1) = ptr_sjk( zmask(:,:,:), btmsk(:,:,1) ) 
     143             r1_sjk(:,:,1) = 0._wp 
     144             WHERE( sjk(:,:,1) /= 0._wp )   r1_sjk(:,:,1) = 1._wp / sjk(:,:,1) 
     145 
     146             ! i-mean T and S, j-Stream-Function, global 
     147             tn_jk(:,:,1) = ptr_sjk( zts(:,:,:,jp_tem) ) * r1_sjk(:,:,1) 
     148             sn_jk(:,:,1) = ptr_sjk( zts(:,:,:,jp_sal) ) * r1_sjk(:,:,1) 
     149             v_msf(:,:,1) = ptr_sjk( zvn(:,:,:) ) 
     150 
     151             htr_ove(:,1) = SUM( v_msf(:,:,1)*tn_jk(:,:,1) ,2 ) 
     152             str_ove(:,1) = SUM( v_msf(:,:,1)*sn_jk(:,:,1) ,2 ) 
     153 
     154             z2d(1,:) = htr_ove(:,1) * rc_pwatt        !  (conversion in PW) 
     155             DO ji = 1, jpi 
     156               z2d(ji,:) = z2d(1,:) 
     157             ENDDO 
     158             cl1 = 'sophtove' 
     159             CALL iom_put( TRIM(cl1), z2d ) 
     160             z2d(1,:) = str_ove(:,1) * rc_ggram        !  (conversion in Gg) 
     161             DO ji = 1, jpi 
     162               z2d(ji,:) = z2d(1,:) 
     163             ENDDO 
     164             cl1 = 'sopstove' 
     165             CALL iom_put( TRIM(cl1), z2d ) 
     166             IF( ln_subbas ) THEN 
     167                DO jn = 2, nptr 
     168                    sjk(:,:,jn) = ptr_sjk( zmask(:,:,:), btmsk(:,:,jn) ) 
     169                    r1_sjk(:,:,jn) = 0._wp 
     170                    WHERE( sjk(:,:,jn) /= 0._wp )   r1_sjk(:,:,jn) = 1._wp / sjk(:,:,jn) 
     171 
     172                    ! i-mean T and S, j-Stream-Function, basin 
     173                    tn_jk(:,:,jn) = ptr_sjk( zts(:,:,:,jp_tem), btmsk(:,:,jn) ) * r1_sjk(:,:,jn) 
     174                    sn_jk(:,:,jn) = ptr_sjk( zts(:,:,:,jp_sal), btmsk(:,:,jn) ) * r1_sjk(:,:,jn) 
     175                    v_msf(:,:,jn) = ptr_sjk( zvn(:,:,:), btmsk(:,:,jn) )  
     176                    htr_ove(:,jn) = SUM( v_msf(:,:,jn)*tn_jk(:,:,jn) ,2 ) 
     177                    str_ove(:,jn) = SUM( v_msf(:,:,jn)*sn_jk(:,:,jn) ,2 ) 
     178 
     179                    z2d(1,:) = htr_ove(:,jn) * rc_pwatt !  (conversion in PW) 
     180                    DO ji = 1, jpi 
     181                        z2d(ji,:) = z2d(1,:) 
     182                    ENDDO 
     183                    cl1 = TRIM('sophtove_'//clsubb(jn)) 
     184                    CALL iom_put( cl1, z2d ) 
     185                    z2d(1,:) = str_ove(:,jn) * rc_ggram        ! (conversion in Gg) 
     186                    DO ji = 1, jpi 
     187                        z2d(ji,:) = z2d(1,:) 
     188                    ENDDO 
     189                    cl1 = TRIM('sopstove_'//clsubb(jn)) 
     190                    CALL iom_put( cl1, z2d ) 
     191                END DO 
     192             ENDIF 
     193         ENDIF 
     194         IF( iom_use("sopstbtr") .OR. iom_use("sophtbtr") ) THEN 
     195         ! Calculate barotropic heat and salt transport here  
     196             sjk(:,1,1) = ptr_sj( zmask(:,:,:), btmsk(:,:,1) ) 
     197             r1_sjk(:,1,1) = 0._wp 
     198             WHERE( sjk(:,1,1) /= 0._wp )   r1_sjk(:,1,1) = 1._wp / sjk(:,1,1) 
     199             
     200            vsum = ptr_sj( zvn(:,:,:), btmsk(:,:,1)) 
     201            tssum(:,jp_tem) = ptr_sj( zts(:,:,:,jp_tem), btmsk(:,:,1) ) 
     202            tssum(:,jp_sal) = ptr_sj( zts(:,:,:,jp_sal), btmsk(:,:,1) ) 
     203            htr_btr(:,1) = vsum * tssum(:,jp_tem) * r1_sjk(:,1,1) 
     204            str_btr(:,1) = vsum * tssum(:,jp_sal) * r1_sjk(:,1,1) 
     205            z2d(1,:) = htr_btr(:,1) * rc_pwatt        !  (conversion in PW) 
     206            DO ji = 2, jpi 
     207               z2d(ji,:) = z2d(1,:) 
     208            ENDDO 
     209            cl1 = 'sophtbtr' 
     210            CALL iom_put( TRIM(cl1), z2d ) 
     211            z2d(1,:) = str_btr(:,1) * rc_ggram        !  (conversion in Gg) 
     212            DO ji = 2, jpi 
     213              z2d(ji,:) = z2d(1,:) 
     214            ENDDO 
     215            cl1 = 'sopstbtr' 
     216            CALL iom_put( TRIM(cl1), z2d ) 
     217            IF( ln_subbas ) THEN 
     218                DO jn = 2, nptr 
     219                    sjk(:,1,jn) = ptr_sj( zmask(:,:,:), btmsk(:,:,jn) ) 
     220                    r1_sjk(:,1,jn) = 0._wp 
     221                    WHERE( sjk(:,1,jn) /= 0._wp )   r1_sjk(:,1,jn) = 1._wp / sjk(:,1,jn) 
     222                    vsum = ptr_sj( zvn(:,:,:), btmsk(:,:,jn)) 
     223                    tssum(:,jp_tem) = ptr_sj( zts(:,:,:,jp_tem), btmsk(:,:,jn) ) 
     224                    tssum(:,jp_sal) = ptr_sj( zts(:,:,:,jp_sal), btmsk(:,:,jn) ) 
     225                    htr_btr(:,jn) = vsum * tssum(:,jp_tem) * r1_sjk(:,1,jn) 
     226                    str_btr(:,jn) = vsum * tssum(:,jp_sal) * r1_sjk(:,1,jn) 
     227                    z2d(1,:) = htr_btr(:,jn) * rc_pwatt !  (conversion in PW) 
     228                    DO ji = 1, jpi 
     229                        z2d(ji,:) = z2d(1,:) 
     230                    ENDDO 
     231                    cl1 = TRIM('sophtbtr_'//clsubb(jn)) 
     232                    CALL iom_put( cl1, z2d ) 
     233                    z2d(1,:) = str_btr(:,jn) * rc_ggram        ! (conversion in Gg) 
     234                    DO ji = 1, jpi 
     235                        z2d(ji,:) = z2d(1,:) 
     236                    ENDDO 
     237                    cl1 = TRIM('sopstbtr_'//clsubb(jn)) 
     238                    CALL iom_put( cl1, z2d ) 
     239               ENDDO 
     240            ENDIF !ln_subbas 
     241         ENDIF !iom_use("sopstbtr....) 
    111242         ! 
    112243      ELSE 
     
    148279         !                                ! Advective and diffusive heat and salt transport 
    149280         IF( iom_use("sophtadv") .OR. iom_use("sopstadv") ) THEN    
    150             z2d(1,:) = htr_adv(:) * rc_pwatt        !  (conversion in PW) 
     281            z2d(1,:) = htr_adv(:,1) * rc_pwatt        !  (conversion in PW) 
    151282            DO ji = 1, jpi 
    152283               z2d(ji,:) = z2d(1,:) 
     
    154285            cl1 = 'sophtadv'                  
    155286            CALL iom_put( TRIM(cl1), z2d ) 
    156             z2d(1,:) = str_adv(:) * rc_ggram        ! (conversion in Gg) 
     287            z2d(1,:) = str_adv(:,1) * rc_ggram        ! (conversion in Gg) 
    157288            DO ji = 1, jpi 
    158289               z2d(ji,:) = z2d(1,:) 
     
    160291            cl1 = 'sopstadv' 
    161292            CALL iom_put( TRIM(cl1), z2d ) 
     293            IF( ln_subbas ) THEN 
     294              DO jn=2,nptr 
     295               z2d(1,:) = htr_adv(:,jn) * rc_pwatt        !  (conversion in PW) 
     296               DO ji = 1, jpi 
     297                 z2d(ji,:) = z2d(1,:) 
     298               ENDDO 
     299               cl1 = TRIM('sophtadv_'//clsubb(jn))                  
     300               CALL iom_put( cl1, z2d ) 
     301               z2d(1,:) = str_adv(:,jn) * rc_ggram        ! (conversion in Gg) 
     302               DO ji = 1, jpi 
     303                  z2d(ji,:) = z2d(1,:) 
     304               ENDDO 
     305               cl1 = TRIM('sopstadv_'//clsubb(jn))                  
     306               CALL iom_put( cl1, z2d )               
     307              ENDDO 
     308            ENDIF 
    162309         ENDIF 
    163310         ! 
    164311         IF( iom_use("sophtldf") .OR. iom_use("sopstldf") ) THEN    
    165             z2d(1,:) = htr_ldf(:) * rc_pwatt        !  (conversion in PW)  
     312            z2d(1,:) = htr_ldf(:,1) * rc_pwatt        !  (conversion in PW)  
    166313            DO ji = 1, jpi 
    167314               z2d(ji,:) = z2d(1,:) 
     
    169316            cl1 = 'sophtldf' 
    170317            CALL iom_put( TRIM(cl1), z2d ) 
    171             z2d(1,:) = str_ldf(:) * rc_ggram        !  (conversion in Gg) 
     318            z2d(1,:) = str_ldf(:,1) * rc_ggram        !  (conversion in Gg) 
    172319            DO ji = 1, jpi 
    173320               z2d(ji,:) = z2d(1,:) 
     
    175322            cl1 = 'sopstldf' 
    176323            CALL iom_put( TRIM(cl1), z2d ) 
     324            IF( ln_subbas ) THEN 
     325              DO jn=2,nptr 
     326               z2d(1,:) = htr_ldf(:,jn) * rc_pwatt        !  (conversion in PW) 
     327               DO ji = 1, jpi 
     328                 z2d(ji,:) = z2d(1,:) 
     329               ENDDO 
     330               cl1 = TRIM('sophtldf_'//clsubb(jn))                  
     331               CALL iom_put( cl1, z2d ) 
     332               z2d(1,:) = str_ldf(:,jn) * rc_ggram        ! (conversion in Gg) 
     333               DO ji = 1, jpi 
     334                  z2d(ji,:) = z2d(1,:) 
     335               ENDDO 
     336               cl1 = TRIM('sopstldf_'//clsubb(jn))                  
     337               CALL iom_put( cl1, z2d )               
     338              ENDDO 
     339            ENDIF 
     340         ENDIF 
     341 
     342         IF( iom_use("sophteiv") .OR. iom_use("sopsteiv") ) THEN  
     343            z2d(1,:) = htr_eiv(:,1) * rc_pwatt        !  (conversion in PW)  
     344            DO ji = 1, jpi 
     345               z2d(ji,:) = z2d(1,:) 
     346            ENDDO 
     347            cl1 = 'sophteiv' 
     348            CALL iom_put( TRIM(cl1), z2d ) 
     349            z2d(1,:) = str_eiv(:,1) * rc_ggram        !  (conversion in Gg) 
     350            DO ji = 1, jpi 
     351               z2d(ji,:) = z2d(1,:) 
     352            ENDDO 
     353            cl1 = 'sopsteiv' 
     354            CALL iom_put( TRIM(cl1), z2d ) 
     355            IF( ln_subbas ) THEN 
     356               DO jn=2,nptr 
     357                  z2d(1,:) = htr_eiv(:,jn) * rc_pwatt        !  (conversion in PW) 
     358                  DO ji = 1, jpi 
     359                     z2d(ji,:) = z2d(1,:) 
     360                  ENDDO 
     361                  cl1 = TRIM('sophteiv_'//clsubb(jn))                  
     362                  CALL iom_put( cl1, z2d ) 
     363                  z2d(1,:) = str_eiv(:,jn) * rc_ggram        ! (conversion in Gg) 
     364                  DO ji = 1, jpi 
     365                     z2d(ji,:) = z2d(1,:) 
     366                  ENDDO 
     367                  cl1 = TRIM('sopsteiv_'//clsubb(jn))  
     368                  CALL iom_put( cl1, z2d )               
     369               ENDDO 
     370            ENDIF 
    177371         ENDIF 
    178372         ! 
     
    254448         ! Initialise arrays to zero because diatpr is called before they are first calculated 
    255449         ! Note that this means diagnostics will not be exactly correct when model run is restarted. 
    256          htr_adv(:) = 0._wp  ;  str_adv(:) =  0._wp   
    257          htr_ldf(:) = 0._wp  ;  str_ldf(:) =  0._wp  
     450         htr_adv(:,:) = 0._wp  ;  str_adv(:,:) =  0._wp  
     451         htr_ldf(:,:) = 0._wp  ;  str_ldf(:,:) =  0._wp  
     452         htr_eiv(:,:) = 0._wp  ;  str_eiv(:,:) =  0._wp  
     453         htr_ove(:,:) = 0._wp  ;   str_ove(:,:) =  0._wp 
     454         htr_btr(:,:) = 0._wp  ;   str_btr(:,:) =  0._wp 
    258455         ! 
    259456      ENDIF  
     
    261458   END SUBROUTINE dia_ptr_init 
    262459 
     460   SUBROUTINE dia_ptr_hst( ktra, cptr, pva )  
     461      !!---------------------------------------------------------------------- 
     462      !!                    ***  ROUTINE dia_ptr_hst *** 
     463      !!---------------------------------------------------------------------- 
     464      !! Wrapper for heat and salt transport calculations to calculate them for each basin 
     465      !! Called from all advection and/or diffusion routines 
     466      !!---------------------------------------------------------------------- 
     467      INTEGER                         , INTENT(in )  :: ktra  ! tracer index 
     468      CHARACTER(len=3)                , INTENT(in)   :: cptr  ! transport type  'adv'/'ldf'/'eiv' 
     469      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in)   :: pva   ! 3D input array of advection/diffusion 
     470      INTEGER                                        :: jn    ! 
     471 
     472      IF( cptr == 'adv' ) THEN 
     473         IF( ktra == jp_tem )  htr_adv(:,1) = ptr_sj( pva(:,:,:) ) 
     474         IF( ktra == jp_sal )  str_adv(:,1) = ptr_sj( pva(:,:,:) ) 
     475      ENDIF 
     476      IF( cptr == 'ldf' ) THEN 
     477         IF( ktra == jp_tem )  htr_ldf(:,1) = ptr_sj( pva(:,:,:) ) 
     478         IF( ktra == jp_sal )  str_ldf(:,1) = ptr_sj( pva(:,:,:) ) 
     479      ENDIF 
     480      IF( cptr == 'eiv' ) THEN 
     481         IF( ktra == jp_tem )  htr_eiv(:,1) = ptr_sj( pva(:,:,:) ) 
     482         IF( ktra == jp_sal )  str_eiv(:,1) = ptr_sj( pva(:,:,:) ) 
     483      ENDIF 
     484      ! 
     485      IF( ln_subbas ) THEN 
     486         ! 
     487         IF( cptr == 'adv' ) THEN 
     488             IF( ktra == jp_tem ) THEN  
     489                DO jn = 2, nptr 
     490                   htr_adv(:,jn) = ptr_sj( pva(:,:,:), btmsk(:,:,jn) ) 
     491                END DO 
     492             ENDIF 
     493             IF( ktra == jp_sal ) THEN  
     494                DO jn = 2, nptr 
     495                   str_adv(:,jn) = ptr_sj( pva(:,:,:), btmsk(:,:,jn) ) 
     496                END DO 
     497             ENDIF 
     498         ENDIF 
     499         IF( cptr == 'ldf' ) THEN 
     500             IF( ktra == jp_tem ) THEN  
     501                DO jn = 2, nptr 
     502                    htr_ldf(:,jn) = ptr_sj( pva(:,:,:), btmsk(:,:,jn) ) 
     503                 END DO 
     504             ENDIF 
     505             IF( ktra == jp_sal ) THEN  
     506                DO jn = 2, nptr 
     507                   str_ldf(:,jn) = ptr_sj( pva(:,:,:), btmsk(:,:,jn) ) 
     508                END DO 
     509             ENDIF 
     510         ENDIF 
     511         IF( cptr == 'eiv' ) THEN 
     512             IF( ktra == jp_tem ) THEN  
     513                DO jn = 2, nptr 
     514                    htr_eiv(:,jn) = ptr_sj( pva(:,:,:), btmsk(:,:,jn) ) 
     515                 END DO 
     516             ENDIF 
     517             IF( ktra == jp_sal ) THEN  
     518                DO jn = 2, nptr 
     519                   str_eiv(:,jn) = ptr_sj( pva(:,:,:), btmsk(:,:,jn) ) 
     520                END DO 
     521             ENDIF 
     522         ENDIF 
     523         ! 
     524      ENDIF 
     525   END SUBROUTINE dia_ptr_hst 
     526 
    263527 
    264528   FUNCTION dia_ptr_alloc() 
     
    271535      ierr(:) = 0 
    272536      ! 
    273       ALLOCATE( btmsk(jpi,jpj,nptr) ,           & 
    274          &      htr_adv(jpj) , str_adv(jpj) ,   & 
    275          &      htr_ldf(jpj) , str_ldf(jpj) , STAT=ierr(1)  ) 
     537      ALLOCATE( btmsk(jpi,jpj,nptr) ,              & 
     538         &      htr_adv(jpj,nptr) , str_adv(jpj,nptr) ,   & 
     539         &      htr_eiv(jpj,nptr) , str_eiv(jpj,nptr) ,   & 
     540         &      htr_ove(jpj,nptr) , str_ove(jpj,nptr) ,   & 
     541         &      htr_btr(jpj,nptr) , str_btr(jpj,nptr) ,   & 
     542         &      htr_ldf(jpj,nptr) , str_ldf(jpj,nptr) , STAT=ierr(1)  ) 
    276543         ! 
    277544      ALLOCATE( p_fval1d(jpj), p_fval2d(jpj,jpk), Stat=ierr(2)) 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/DIA/diawri.F90

    r6387 r7403  
    302302      CALL iom_put( "hdiv", hdivn )                  ! Horizontal divergence 
    303303      ! 
    304       IF( iom_use("u_masstr") .OR. iom_use("u_heattr") .OR. iom_use("u_salttr") ) THEN 
     304      IF( iom_use("u_masstr") .OR. iom_use("u_masstr_vint") .OR. iom_use("u_heattr") .OR. iom_use("u_salttr") ) THEN 
    305305         z3d(:,:,jpk) = 0.e0 
     306         z2d(:,:) = 0.e0 
    306307         DO jk = 1, jpkm1 
    307308            z3d(:,:,jk) = rau0 * un(:,:,jk) * e2u(:,:) * e3u_n(:,:,jk) * umask(:,:,jk) 
     309            z2d(:,:) = z2d(:,:) + z3d(:,:,jk) 
    308310         END DO 
    309311         CALL iom_put( "u_masstr", z3d )                  ! mass transport in i-direction 
     312         CALL iom_put( "u_masstr_vint", z2d )             ! mass transport in i-direction vertical sum 
    310313      ENDIF 
    311314       
     
    370373         CALL iom_put( "v_salttr", 0.5 * z2d )            !  heat transport in j-direction 
    371374      ENDIF 
     375 
     376      ! Vertical integral of temperature 
     377      IF( iom_use("tosmint") ) THEN 
     378         z2d(:,:)=0._wp 
     379         DO jk = 1, jpkm1 
     380            DO jj = 2, jpjm1 
     381               DO ji = fs_2, fs_jpim1   ! vector opt. 
     382                  z2d(ji,jj) = z2d(ji,jj) + rau0 * e3t_n(ji,jj,jk) *  tsn(ji,jj,jk,jp_tem) 
     383               END DO 
     384            END DO 
     385         END DO 
     386         CALL lbc_lnk( z2d, 'T', -1. ) 
     387         CALL iom_put( "tosmint", z2d )  
     388      ENDIF 
     389 
     390      ! Vertical integral of salinity 
     391      IF( iom_use("somint") ) THEN 
     392         z2d(:,:)=0._wp 
     393         DO jk = 1, jpkm1 
     394            DO jj = 2, jpjm1 
     395               DO ji = fs_2, fs_jpim1   ! vector opt. 
     396                  z2d(ji,jj) = z2d(ji,jj) + rau0 * e3t_n(ji,jj,jk) * tsn(ji,jj,jk,jp_sal) 
     397               END DO 
     398            END DO 
     399         END DO 
     400         CALL lbc_lnk( z2d, 'T', -1. ) 
     401         CALL iom_put( "somint", z2d )  
     402      ENDIF 
     403 
     404      CALL iom_put( "bn2", rn2 )  !Brunt-Vaisala buoyancy frequency (N^2) 
    372405      ! 
    373406      CALL wrk_dealloc( jpi , jpj      , z2d ) 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/LDF/ldftra.F90

    r6140 r7403  
    2424   USE ldfslp          ! lateral diffusion: slope of iso-neutral surfaces 
    2525   USE ldfc1d_c2d      ! lateral diffusion: 1D & 2D cases  
    26    USE diaar5, ONLY:   lk_diaar5 
     26   USE diaptr 
    2727   ! 
    2828   USE trc_oce, ONLY: lk_offline ! offline flag 
     
    730730      CALL iom_put( "woce_eiv", zw3d ) 
    731731      ! 
     732      !       
     733      ! 
     734      CALL wrk_alloc( jpi,jpj,   zw2d ) 
     735      ! 
     736      zztmp = 0.5_wp * rau0 * rcp  
     737      IF( iom_use('ueiv_heattr') .OR. iom_use('ueiv_heattr3d') ) THEN 
     738        zw2d(:,:)   = 0._wp  
     739        zw3d(:,:,:) = 0._wp  
     740        DO jk = 1, jpkm1 
     741           DO jj = 2, jpjm1 
     742              DO ji = fs_2, fs_jpim1   ! vector opt. 
     743                 zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_uw(ji,jj,jk+1)      - psi_uw(ji,jj,jk)          )   & 
     744                    &                            * ( tsn   (ji,jj,jk,jp_tem) + tsn   (ji+1,jj,jk,jp_tem) )  
     745                 zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) 
     746              END DO 
     747           END DO 
     748        END DO 
     749        CALL lbc_lnk( zw2d, 'U', -1. ) 
     750        CALL lbc_lnk( zw3d, 'U', -1. ) 
     751        CALL iom_put( "ueiv_heattr"  , zztmp * zw2d )                  ! heat transport in i-direction 
     752        CALL iom_put( "ueiv_heattr3d", zztmp * zw3d )                  ! heat transport in i-direction 
     753      ENDIF 
     754      zw2d(:,:)   = 0._wp  
     755      zw3d(:,:,:) = 0._wp  
     756      DO jk = 1, jpkm1 
     757         DO jj = 2, jpjm1 
     758            DO ji = fs_2, fs_jpim1   ! vector opt. 
     759               zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_vw(ji,jj,jk+1)      - psi_vw(ji,jj,jk)          )   & 
     760                  &                            * ( tsn   (ji,jj,jk,jp_tem) + tsn   (ji,jj+1,jk,jp_tem) )  
     761               zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) 
     762            END DO 
     763         END DO 
     764      END DO 
     765      CALL lbc_lnk( zw2d, 'V', -1. ) 
     766      CALL iom_put( "veiv_heattr", zztmp * zw2d )                  !  heat transport in j-direction 
     767      CALL iom_put( "veiv_heattr", zztmp * zw3d )                  !  heat transport in j-direction 
     768      ! 
     769      IF( ln_diaptr )  CALL dia_ptr_hst( jp_tem, 'eiv', 0.5 * zw3d ) 
     770      ! 
     771      zztmp = 0.5_wp * 0.5 
     772      IF( iom_use('ueiv_salttr') .OR. iom_use('ueiv_salttr3d')) THEN 
     773        zw2d(:,:) = 0._wp  
     774        zw3d(:,:,:) = 0._wp  
     775        DO jk = 1, jpkm1 
     776           DO jj = 2, jpjm1 
     777              DO ji = fs_2, fs_jpim1   ! vector opt. 
     778                 zw3d(ji,jj,jk) = zw3d(ji,jj,jk) * ( psi_uw(ji,jj,jk+1)      - psi_uw(ji,jj,jk)          )   & 
     779                    &                            * ( tsn   (ji,jj,jk,jp_sal) + tsn   (ji+1,jj,jk,jp_sal) )  
     780                 zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) 
     781              END DO 
     782           END DO 
     783        END DO 
     784        CALL lbc_lnk( zw2d, 'U', -1. ) 
     785        CALL lbc_lnk( zw3d, 'U', -1. ) 
     786        CALL iom_put( "ueiv_salttr", zztmp * zw2d )                  ! salt transport in i-direction 
     787        CALL iom_put( "ueiv_salttr3d", zztmp * zw3d )                  ! salt transport in i-direction 
     788      ENDIF 
     789      zw2d(:,:) = 0._wp  
     790      zw3d(:,:,:) = 0._wp  
     791      DO jk = 1, jpkm1 
     792         DO jj = 2, jpjm1 
     793            DO ji = fs_2, fs_jpim1   ! vector opt. 
     794               zw3d(ji,jj,jk) = zw3d(ji,jj,jk) + ( psi_vw(ji,jj,jk+1)      - psi_vw(ji,jj,jk)          )   & 
     795                  &                            * ( tsn   (ji,jj,jk,jp_sal) + tsn   (ji,jj+1,jk,jp_sal) )  
     796               zw2d(ji,jj) = zw2d(ji,jj) + zw3d(ji,jj,jk) 
     797            END DO 
     798         END DO 
     799      END DO 
     800      CALL lbc_lnk( zw2d, 'V', -1. ) 
     801      CALL iom_put( "veiv_salttr", zztmp * zw2d )                  !  salt transport in j-direction 
     802      CALL iom_put( "veiv_salttr", zztmp * zw3d )                  !  salt transport in j-direction 
     803      ! 
     804      IF( ln_diaptr ) CALL dia_ptr_hst( jp_sal, 'eiv', 0.5 * zw3d ) 
     805      ! 
     806      CALL wrk_dealloc( jpi,jpj,   zw2d ) 
    732807      CALL wrk_dealloc( jpi,jpj,jpk,   zw3d ) 
    733       !       
    734       ! 
    735       IF( lk_diaar5 ) THEN                               !==  eiv heat transport: calculate and output  ==! 
    736          CALL wrk_alloc( jpi,jpj,   zw2d ) 
    737          ! 
    738          zztmp = 0.5_wp * rau0 * rcp  
    739          zw2d(:,:) = 0._wp  
    740          DO jk = 1, jpkm1 
    741             DO jj = 2, jpjm1 
    742                DO ji = fs_2, fs_jpim1   ! vector opt. 
    743                   zw2d(ji,jj) = zw2d(ji,jj) + zztmp * ( psi_uw(ji,jj,jk+1)      - psi_uw(ji,jj,jk)          )   & 
    744                      &                              * ( tsn   (ji,jj,jk,jp_tem) + tsn   (ji+1,jj,jk,jp_tem) )  
    745                END DO 
    746             END DO 
    747          END DO 
    748          CALL lbc_lnk( zw2d, 'U', -1. ) 
    749          CALL iom_put( "ueiv_heattr", zw2d )                  ! heat transport in i-direction 
    750          zw2d(:,:) = 0._wp  
    751          DO jk = 1, jpkm1 
    752             DO jj = 2, jpjm1 
    753                DO ji = fs_2, fs_jpim1   ! vector opt. 
    754                   zw2d(ji,jj) = zw2d(ji,jj) + zztmp * ( psi_vw(ji,jj,jk+1)      - psi_vw(ji,jj,jk)          )   & 
    755                      &                              * ( tsn   (ji,jj,jk,jp_tem) + tsn   (ji,jj+1,jk,jp_tem) )  
    756                END DO 
    757             END DO 
    758          END DO 
    759          CALL lbc_lnk( zw2d, 'V', -1. ) 
    760          CALL iom_put( "veiv_heattr", zw2d )                  !  heat transport in i-direction 
    761          ! 
    762          CALL wrk_dealloc( jpi,jpj,   zw2d ) 
    763       ENDIF 
    764808      ! 
    765809      IF( nn_timing == 1 )  CALL timing_stop( 'ldf_eiv_dia')       
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/SBC/cpl_oasis3.F90

    r5836 r7403  
    6666   INTEGER                    ::   nsnd         ! total number of fields sent  
    6767   INTEGER                    ::   ncplmodel    ! Maximum number of models to/from which NEMO is potentialy sending/receiving data 
    68    INTEGER, PUBLIC, PARAMETER ::   nmaxfld=50   ! Maximum number of coupling fields 
     68   INTEGER, PUBLIC, PARAMETER ::   nmaxfld=55   ! Maximum number of coupling fields 
    6969   INTEGER, PUBLIC, PARAMETER ::   nmaxcat=5    ! Maximum number of coupling fields 
    7070   INTEGER, PUBLIC, PARAMETER ::   nmaxcpl=5    ! Maximum number of coupling fields 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90

    r6140 r7403  
    6565   LOGICAL , PUBLIC ::   ln_cdgw        !: true if neutral drag coefficient from wave model 
    6666   LOGICAL , PUBLIC ::   ln_sdw         !: true if 3d stokes drift from wave model 
     67   LOGICAL , PUBLIC ::   ln_tauoc       !: true if normalized stress from wave is used 
     68   LOGICAL , PUBLIC ::   ln_stcor       !: true if Stokes-Coriolis term is used 
    6769   ! 
    6870   LOGICAL , PUBLIC ::   ln_icebergs    !: Icebergs 
     
    120122   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sprecip           !: solid precipitation                          [Kg/m2/s] 
    121123   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   fr_i              !: ice fraction = 1 - lead fraction      (between 0 to 1) 
    122 #if defined key_cpl_carbon_cycle 
    123124   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   atm_co2           !: atmospheric pCO2                             [ppm] 
    124 #endif 
    125125   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xcplmask          !: coupling mask for ln_mixcpl (warning: allocated in sbccpl) 
    126126 
     
    166166         ! 
    167167      ALLOCATE( tprecip(jpi,jpj) , sprecip(jpi,jpj) , fr_i(jpi,jpj) ,     & 
    168 #if defined key_cpl_carbon_cycle 
    169168         &      atm_co2(jpi,jpj) ,                                        & 
    170 #endif 
    171169         &      ssu_m  (jpi,jpj) , sst_m(jpi,jpj) , frq_m(jpi,jpj) ,      & 
    172170         &      ssv_m  (jpi,jpj) , sss_m(jpi,jpj) , ssh_m(jpi,jpj) , STAT=ierr(4) ) 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_core.F90

    r6813 r7403  
    745745 
    746746      !! Neutral coefficients at 10m: 
    747       IF( ln_cdgw ) THEN      ! wave drag case 
     747      IF( ln_wave .AND. ln_cdgw ) THEN      ! wave drag case 
    748748         cdn_wave(:,:) = cdn_wave(:,:) + rsmall * ( 1._wp - tmask(:,:,1) ) 
    749749         ztmp0   (:,:) = cdn_wave(:,:) 
     
    791791         END IF 
    792792        
    793          IF( ln_cdgw ) THEN      ! surface wave case 
     793         IF( ln_wave .AND. ln_cdgw ) THEN      ! surface wave case 
    794794            sqrt_Cd = vkarmn / ( vkarmn / sqrt_Cd_n10 - zpsi_m_u )  
    795795            Cd      = sqrt_Cd * sqrt_Cd 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbcblk_mfs.F90

    r6140 r7403  
    1717   USE fldread        ! read input fields 
    1818   USE sbc_oce        ! Surface boundary condition: ocean fields 
    19    USE sbcwave  ,ONLY :   cdn_wave !wave module 
    2019   ! 
    2120   USE iom            ! I/O manager library 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbccpl.F90

    r6722 r7403  
    1818   !!   sbc_cpl_snd     : send     fields to the atmosphere 
    1919   !!---------------------------------------------------------------------- 
    20    USE dom_oce        ! ocean space and time domain 
    21    USE sbc_oce        ! Surface boundary condition: ocean fields 
    22    USE sbc_ice        ! Surface boundary condition: ice fields 
    23    USE sbcapr         ! Stochastic param. : ??? 
    24    USE sbcdcy         ! surface boundary condition: diurnal cycle 
    25    USE phycst         ! physical constants 
     20   USE dom_oce         ! ocean space and time domain 
     21   USE sbc_oce         ! Surface boundary condition: ocean fields 
     22   USE trc_oce         ! share SMS/Ocean variables 
     23   USE sbc_ice         ! Surface boundary condition: ice fields 
     24   USE sbcapr          ! Stochastic param. : ??? 
     25   USE sbcdcy          ! surface boundary condition: diurnal cycle 
     26   USE sbcwave         ! surface boundary condition: waves 
     27   USE phycst          ! physical constants 
    2628#if defined key_lim3 
    2729   USE ice            ! ice variables 
     
    3638   USE albedo         !  
    3739   USE eosbn2         !  
    38    USE sbcrnf  , ONLY : l_rnfcpl 
    39 #if defined key_cpl_carbon_cycle 
    40    USE p4zflx, ONLY : oce_co2 
    41 #endif 
     40   USE sbcrnf, ONLY : l_rnfcpl 
    4241#if defined key_cice 
    4342   USE ice_domain_size, only: ncat 
     
    106105   INTEGER, PARAMETER ::   jpr_e3t1st = 41   ! first T level thickness  
    107106   INTEGER, PARAMETER ::   jpr_fraqsr = 42   ! fraction of solar net radiation absorbed in the first ocean level 
    108    INTEGER, PARAMETER ::   jprcv      = 42   ! total number of fields received 
     107   INTEGER, PARAMETER ::   jpr_mslp   = 43   ! mean sea level pressure  
     108   INTEGER, PARAMETER ::   jpr_hsig   = 44   ! Hsig  
     109   INTEGER, PARAMETER ::   jpr_phioc  = 45   ! Wave=>ocean energy flux  
     110   INTEGER, PARAMETER ::   jpr_sdrftx = 46   ! Stokes drift on grid 1  
     111   INTEGER, PARAMETER ::   jpr_sdrfty = 47   ! Stokes drift on grid 2  
     112   INTEGER, PARAMETER ::   jpr_wper   = 48   ! Mean wave period 
     113   INTEGER, PARAMETER ::   jpr_wnum   = 49   ! Mean wavenumber 
     114   INTEGER, PARAMETER ::   jpr_wstrf  = 50   ! Stress fraction adsorbed by waves 
     115   INTEGER, PARAMETER ::   jpr_wdrag  = 51   ! Neutral surface drag coefficient 
     116   INTEGER, PARAMETER ::   jprcv      = 51   ! total number of fields received   
    109117 
    110118   INTEGER, PARAMETER ::   jps_fice   =  1   ! ice fraction sent to the atmosphere 
     
    136144   INTEGER, PARAMETER ::   jps_e3t1st = 27   ! first level depth (vvl) 
    137145   INTEGER, PARAMETER ::   jps_fraqsr = 28   ! fraction of solar net radiation absorbed in the first ocean level 
    138    INTEGER, PARAMETER ::   jpsnd      = 28   ! total number of fields sended 
     146   INTEGER, PARAMETER ::   jps_ficet  = 29   ! total ice fraction   
     147   INTEGER, PARAMETER ::   jps_ocxw   = 30   ! currents on grid 1   
     148   INTEGER, PARAMETER ::   jps_ocyw   = 31   ! currents on grid 2 
     149   INTEGER, PARAMETER ::   jps_wlev   = 32   ! water level  
     150   INTEGER, PARAMETER ::   jpsnd      = 32   ! total number of fields sent  
    139151 
    140152   !                                  !!** namelist namsbc_cpl ** 
     
    150162   !                                   ! Received from the atmosphere 
    151163   TYPE(FLD_C) ::   sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau, sn_rcv_dqnsdt, sn_rcv_qsr, sn_rcv_qns, sn_rcv_emp, sn_rcv_rnf 
    152    TYPE(FLD_C) ::   sn_rcv_cal, sn_rcv_iceflx, sn_rcv_co2                         
     164   TYPE(FLD_C) ::   sn_rcv_cal, sn_rcv_iceflx, sn_rcv_co2, sn_rcv_mslp                            
     165   ! Send to waves  
     166   TYPE(FLD_C) ::   sn_snd_ifrac, sn_snd_crtw, sn_snd_wlev  
     167   ! Received from waves  
     168   TYPE(FLD_C) ::   sn_rcv_hsig,sn_rcv_phioc,sn_rcv_sdrfx,sn_rcv_sdrfy,sn_rcv_wper,sn_rcv_wnum,sn_rcv_wstrf,sn_rcv_wdrag 
    153169   !                                   ! Other namelist parameters 
    154170   INTEGER     ::   nn_cplmodel           ! Maximum number of models to/from which NEMO is potentialy sending/receiving data 
     
    163179   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   albedo_oce_mix    ! ocean albedo sent to atmosphere (mix clear/overcast sky) 
    164180 
    165    INTEGER , ALLOCATABLE, SAVE, DIMENSION(    :) ::   nrcvinfo          ! OASIS info argument 
     181   REAL(wp) ::   rpref = 101000._wp   ! reference atmospheric pressure[N/m2]  
     182   REAL(wp) ::   r1_grau              ! = 1.e0 / (grav * rau0)  
     183 
     184   INTEGER , ALLOCATABLE, SAVE, DIMENSION(    :) ::   nrcvinfo           ! OASIS info argument 
    166185 
    167186   !! Substitution 
     
    178197      !!             ***  FUNCTION sbc_cpl_alloc  *** 
    179198      !!---------------------------------------------------------------------- 
    180       INTEGER :: ierr(3) 
     199      INTEGER :: ierr(4) 
    181200      !!---------------------------------------------------------------------- 
    182201      ierr(:) = 0 
     
    189208      ALLOCATE( xcplmask(jpi,jpj,0:nn_cplmodel) , STAT=ierr(3) ) 
    190209      ! 
     210      IF( .NOT. ln_apr_dyn ) ALLOCATE( ssh_ib(jpi,jpj), ssh_ibb(jpi,jpj), apr(jpi, jpj), STAT=ierr(4) )  
     211 
    191212      sbc_cpl_alloc = MAXVAL( ierr ) 
    192213      IF( lk_mpp            )   CALL mpp_sum ( sbc_cpl_alloc ) 
     
    214235      REAL(wp), POINTER, DIMENSION(:,:) ::   zacs, zaos 
    215236      !! 
    216       NAMELIST/namsbc_cpl/  sn_snd_temp, sn_snd_alb   , sn_snd_thick, sn_snd_crt   , sn_snd_co2,      & 
    217          &                  sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau  , sn_rcv_dqnsdt, sn_rcv_qsr,      & 
    218          &                  sn_rcv_qns , sn_rcv_emp   , sn_rcv_rnf  , sn_rcv_cal   , sn_rcv_iceflx,   & 
    219          &                  sn_rcv_co2 , nn_cplmodel  , ln_usecplmask 
     237      NAMELIST/namsbc_cpl/  sn_snd_temp , sn_snd_alb  , sn_snd_thick , sn_snd_crt   , sn_snd_co2,      &  
     238         &                  sn_rcv_w10m, sn_rcv_taumod, sn_rcv_tau   , sn_rcv_dqnsdt, sn_rcv_qsr,      &  
     239         &                  sn_snd_ifrac, sn_snd_crtw , sn_snd_wlev  , sn_rcv_hsig  , sn_rcv_phioc ,   &  
     240         &                  sn_rcv_sdrfx, sn_rcv_sdrfy, sn_rcv_wper  , sn_rcv_wnum  , sn_rcv_wstrf ,   & 
     241         &                  sn_rcv_wdrag, sn_rcv_qns  , sn_rcv_emp   , sn_rcv_rnf   , sn_rcv_cal   ,   & 
     242         &                  sn_rcv_iceflx,sn_rcv_co2  , nn_cplmodel  , ln_usecplmask, sn_rcv_mslp  
    220243      !!--------------------------------------------------------------------- 
    221244      ! 
     
    258281         WRITE(numout,*)'      sea ice heat fluxes             = ', TRIM(sn_rcv_iceflx%cldes), ' (', TRIM(sn_rcv_iceflx%clcat), ')' 
    259282         WRITE(numout,*)'      atm co2                         = ', TRIM(sn_rcv_co2%cldes   ), ' (', TRIM(sn_rcv_co2%clcat   ), ')' 
     283         WRITE(numout,*)'      significant wave heigth         = ', TRIM(sn_rcv_hsig%cldes  ), ' (', TRIM(sn_rcv_hsig%clcat  ), ')'  
     284         WRITE(numout,*)'      wave to oce energy flux         = ', TRIM(sn_rcv_phioc%cldes ), ' (', TRIM(sn_rcv_phioc%clcat ), ')'  
     285         WRITE(numout,*)'      Surface Stokes drift grid u     = ', TRIM(sn_rcv_sdrfx%cldes ), ' (', TRIM(sn_rcv_sdrfx%clcat ), ')'  
     286         WRITE(numout,*)'      Surface Stokes drift grid v     = ', TRIM(sn_rcv_sdrfy%cldes ), ' (', TRIM(sn_rcv_sdrfy%clcat ), ')'  
     287         WRITE(numout,*)'      Mean wave period                = ', TRIM(sn_rcv_wper%cldes  ), ' (', TRIM(sn_rcv_wper%clcat  ), ')'  
     288         WRITE(numout,*)'      Mean wave number                = ', TRIM(sn_rcv_wnum%cldes  ), ' (', TRIM(sn_rcv_wnum%clcat  ), ')'  
     289         WRITE(numout,*)'      Stress frac adsorbed by waves   = ', TRIM(sn_rcv_wstrf%cldes ), ' (', TRIM(sn_rcv_wstrf%clcat ), ')'  
     290         WRITE(numout,*)'      Neutral surf drag coefficient   = ', TRIM(sn_rcv_wdrag%cldes ), ' (', TRIM(sn_rcv_wdrag%clcat ), ')'  
    260291         WRITE(numout,*)'  sent fields (multiple ice categories)' 
    261292         WRITE(numout,*)'      surface temperature             = ', TRIM(sn_snd_temp%cldes  ), ' (', TRIM(sn_snd_temp%clcat  ), ')' 
    262293         WRITE(numout,*)'      albedo                          = ', TRIM(sn_snd_alb%cldes   ), ' (', TRIM(sn_snd_alb%clcat   ), ')' 
    263294         WRITE(numout,*)'      ice/snow thickness              = ', TRIM(sn_snd_thick%cldes ), ' (', TRIM(sn_snd_thick%clcat ), ')' 
     295         WRITE(numout,*)'      total ice fraction              = ', TRIM(sn_snd_ifrac%cldes ), ' (', TRIM(sn_snd_ifrac%clcat ), ')'  
    264296         WRITE(numout,*)'      surface current                 = ', TRIM(sn_snd_crt%cldes   ), ' (', TRIM(sn_snd_crt%clcat   ), ')' 
    265297         WRITE(numout,*)'                      - referential   = ', sn_snd_crt%clvref  
     
    267299         WRITE(numout,*)'                      - mesh          = ', sn_snd_crt%clvgrd 
    268300         WRITE(numout,*)'      oce co2 flux                    = ', TRIM(sn_snd_co2%cldes   ), ' (', TRIM(sn_snd_co2%clcat   ), ')' 
     301         WRITE(numout,*)'      water level                     = ', TRIM(sn_snd_wlev%cldes  ), ' (', TRIM(sn_snd_wlev%clcat  ), ')'  
     302         WRITE(numout,*)'      mean sea level pressure         = ', TRIM(sn_rcv_mslp%cldes  ), ' (', TRIM(sn_rcv_mslp%clcat  ), ')'  
     303         WRITE(numout,*)'      surface current to waves        = ', TRIM(sn_snd_crtw%cldes  ), ' (', TRIM(sn_snd_crtw%clcat  ), ')'  
     304         WRITE(numout,*)'                      - referential   = ', sn_snd_crtw%clvref  
     305         WRITE(numout,*)'                      - orientation   = ', sn_snd_crtw%clvor  
     306         WRITE(numout,*)'                      - mesh          = ', sn_snd_crtw%clvgrd  
    269307         WRITE(numout,*)'  nn_cplmodel                         = ', nn_cplmodel 
    270308         WRITE(numout,*)'  ln_usecplmask                       = ', ln_usecplmask 
     
    305343      !  
    306344      ! Vectors: change of sign at north fold ONLY if on the local grid 
     345      IF( TRIM( sn_rcv_tau%cldes ) == 'oce only' .OR. TRIM(sn_rcv_tau%cldes ) == 'oce and ice') THEN ! avoid working with the atmospheric fields if they are not coupled 
    307346      IF( TRIM( sn_rcv_tau%clvor ) == 'local grid' )   srcv(jpr_otx1:jpr_itz2)%nsgn = -1. 
    308347       
     
    372411         srcv(jpr_ity1)%clgrid = 'V'                  ! i.e. it is always at U- & V-points for i- & j-comp. resp. 
    373412      ENDIF 
    374       ! 
     413      ENDIF 
     414 
    375415      !                                                      ! ------------------------- ! 
    376416      !                                                      !    freshwater budget      !   E-P 
     
    467507      !                                                      !      Atmospheric CO2      ! 
    468508      !                                                      ! ------------------------- ! 
    469       srcv(jpr_co2 )%clname = 'O_AtmCO2'   ;   IF( TRIM(sn_rcv_co2%cldes   ) == 'coupled' )    srcv(jpr_co2 )%laction = .TRUE. 
     509      srcv(jpr_co2 )%clname = 'O_AtmCO2'    
     510      IF( TRIM(sn_rcv_co2%cldes   ) == 'coupled' )  THEN 
     511         srcv(jpr_co2 )%laction = .TRUE. 
     512         l_co2cpl = .TRUE. 
     513         IF(lwp) WRITE(numout,*) 
     514         IF(lwp) WRITE(numout,*) '   Atmospheric pco2 received from oasis ' 
     515         IF(lwp) WRITE(numout,*) 
     516      ENDIF 
     517 
     518      !                                                      ! ------------------------- !  
     519      !                                                      ! Mean Sea Level Pressure   !  
     520      !                                                      ! ------------------------- !  
     521      srcv(jpr_mslp)%clname = 'O_MSLP'     ;   IF( TRIM(sn_rcv_mslp%cldes  ) == 'coupled' )    srcv(jpr_mslp)%laction = .TRUE.  
     522 
    470523      !                                                      ! ------------------------- ! 
    471524      !                                                      !   topmelt and botmelt     !    
     
    481534         srcv(jpr_topm:jpr_botm)%laction = .TRUE. 
    482535      ENDIF 
     536      !                                                      ! ------------------------- ! 
     537      !                                                      !      Wave breaking        !     
     538      !                                                      ! ------------------------- !  
     539      srcv(jpr_hsig)%clname  = 'O_Hsigwa'    ! significant wave height 
     540      IF( TRIM(sn_rcv_hsig%cldes  ) == 'coupled' )  THEN 
     541         srcv(jpr_hsig)%laction = .TRUE. 
     542         cpl_hsig = .TRUE. 
     543      ENDIF 
     544      srcv(jpr_phioc)%clname = 'O_PhiOce'    ! wave to ocean energy 
     545      IF( TRIM(sn_rcv_phioc%cldes ) == 'coupled' )  THEN 
     546         srcv(jpr_phioc)%laction = .TRUE. 
     547         cpl_phioc = .TRUE. 
     548      ENDIF 
     549      srcv(jpr_sdrftx)%clname = 'O_Sdrfx'    ! Stokes drift in the u direction 
     550      IF( TRIM(sn_rcv_sdrfx%cldes ) == 'coupled' )  THEN 
     551         srcv(jpr_sdrftx)%laction = .TRUE. 
     552         cpl_sdrftx = .TRUE. 
     553      ENDIF 
     554      srcv(jpr_sdrfty)%clname = 'O_Sdrfy'    ! Stokes drift in the v direction 
     555      IF( TRIM(sn_rcv_sdrfy%cldes ) == 'coupled' )  THEN 
     556         srcv(jpr_sdrfty)%laction = .TRUE. 
     557         cpl_sdrfty = .TRUE. 
     558      ENDIF 
     559      srcv(jpr_wper)%clname = 'O_WPer'       ! mean wave period 
     560      IF( TRIM(sn_rcv_wper%cldes  ) == 'coupled' )  THEN 
     561         srcv(jpr_wper)%laction = .TRUE. 
     562         cpl_wper = .TRUE. 
     563      ENDIF 
     564      srcv(jpr_wnum)%clname = 'O_WNum'       ! mean wave number 
     565      IF( TRIM(sn_rcv_wnum%cldes ) == 'coupled' )  THEN 
     566         srcv(jpr_wnum)%laction = .TRUE. 
     567         cpl_wnum = .TRUE. 
     568      ENDIF 
     569      srcv(jpr_wstrf)%clname = 'O_WStrf'     ! stress fraction adsorbed by the wave 
     570      IF( TRIM(sn_rcv_wstrf%cldes ) == 'coupled' )  THEN 
     571         srcv(jpr_wstrf)%laction = .TRUE. 
     572         cpl_wstrf = .TRUE. 
     573      ENDIF 
     574      srcv(jpr_wdrag)%clname = 'O_WDrag'     ! neutral surface drag coefficient 
     575      IF( TRIM(sn_rcv_wdrag%cldes ) == 'coupled' )  THEN 
     576         srcv(jpr_wdrag)%laction = .TRUE. 
     577         cpl_wdrag = .TRUE. 
     578      ENDIF 
     579      !  
    483580      !                                                      ! ------------------------------- ! 
    484581      !                                                      !   OPA-SAS coupling - rcv by opa !    
     
    635732      !                                                      ! ------------------------- ! 
    636733      ssnd(jps_fice)%clname = 'OIceFrc' 
     734      ssnd(jps_ficet)%clname = 'OIceFrcT'  
    637735      ssnd(jps_hice)%clname = 'OIceTck' 
    638736      ssnd(jps_hsnw)%clname = 'OSnwTck' 
     
    643741      ENDIF 
    644742       
     743      IF (TRIM( sn_snd_ifrac%cldes )  == 'coupled') ssnd(jps_ficet)%laction = .TRUE.  
     744 
    645745      SELECT CASE ( TRIM( sn_snd_thick%cldes ) ) 
    646746      CASE( 'none'         )       ! nothing to do 
     
    663763      ssnd(jps_ocy1)%clname = 'O_OCury1'   ;   ssnd(jps_ivy1)%clname = 'O_IVely1' 
    664764      ssnd(jps_ocz1)%clname = 'O_OCurz1'   ;   ssnd(jps_ivz1)%clname = 'O_IVelz1' 
     765      ssnd(jps_ocxw)%clname = 'O_OCurxw'  
     766      ssnd(jps_ocyw)%clname = 'O_OCuryw'  
    665767      ! 
    666768      ssnd(jps_ocx1:jps_ivz1)%nsgn = -1.   ! vectors: change of the sign at the north fold 
     
    683785      END SELECT 
    684786 
     787      ssnd(jps_ocxw:jps_ocyw)%nsgn = -1.   ! vectors: change of the sign at the north fold  
     788         
     789      IF( sn_snd_crtw%clvgrd == 'U,V' ) THEN  
     790         ssnd(jps_ocxw)%clgrid = 'U' ; ssnd(jps_ocyw)%clgrid = 'V'  
     791      ELSE IF( sn_snd_crtw%clvgrd /= 'T' ) THEN  
     792         CALL ctl_stop( 'sn_snd_crtw%clvgrd must be equal to T' )  
     793      ENDIF  
     794      IF( TRIM( sn_snd_crtw%clvor ) == 'eastward-northward' ) ssnd(jps_ocxw:jps_ocyw)%nsgn = 1.  
     795      SELECT CASE( TRIM( sn_snd_crtw%cldes ) )  
     796         CASE( 'none'                 )   ; ssnd(jps_ocxw:jps_ocyw)%laction = .FALSE.  
     797         CASE( 'oce only'             )   ; ssnd(jps_ocxw:jps_ocyw)%laction = .TRUE.  
     798         CASE( 'weighted oce and ice' )   !   nothing to do  
     799         CASE( 'mixed oce-ice'        )   ; ssnd(jps_ivx1:jps_ivz1)%laction = .FALSE.  
     800         CASE default   ;   CALL ctl_stop( 'sbc_cpl_init: wrong definition of sn_snd_crtw%cldes' )  
     801      END SELECT  
     802 
    685803      !                                                      ! ------------------------- ! 
    686804      !                                                      !          CO2 flux         ! 
    687805      !                                                      ! ------------------------- ! 
    688806      ssnd(jps_co2)%clname = 'O_CO2FLX' ;  IF( TRIM(sn_snd_co2%cldes) == 'coupled' )    ssnd(jps_co2 )%laction = .TRUE. 
     807 
     808      !                                                      ! ------------------------- !  
     809      !                                                      !     Sea surface height    !  
     810      !                                                      ! ------------------------- !  
     811      ssnd(jps_wlev)%clname = 'O_Wlevel' ;  IF( TRIM(sn_snd_wlev%cldes) == 'coupled' )   ssnd(jps_wlev)%laction = .TRUE.  
    689812 
    690813      !                                                      ! ------------------------------- ! 
     
    781904      IF( ln_dm2dc .AND. ln_cpl .AND. ncpl_qsr_freq /= 86400 )   & 
    782905         &   CALL ctl_stop( 'sbc_cpl_init: diurnal cycle reconstruction (ln_dm2dc) needs daily couping for solar radiation' ) 
    783       ncpl_qsr_freq = 86400 / ncpl_qsr_freq 
     906      IF( ln_dm2dc .AND. ln_cpl ) ncpl_qsr_freq = 86400 / ncpl_qsr_freq 
    784907 
    785908      CALL wrk_dealloc( jpi,jpj,   zacs, zaos ) 
     
    835958      !!                        emp          upward mass flux [evap. - precip. (- runoffs) (- calving)] (ocean only case) 
    836959      !!---------------------------------------------------------------------- 
    837       INTEGER, INTENT(in) ::   kt       ! ocean model time step index 
    838       INTEGER, INTENT(in) ::   k_fsbc   ! frequency of sbc (-> ice model) computation  
    839       INTEGER, INTENT(in) ::   k_ice    ! ice management in the sbc (=0/1/2/3) 
    840  
     960      USE zdf_oce,  ONLY : ln_zdfqiao 
     961 
     962      IMPLICIT NONE 
     963 
     964      INTEGER, INTENT(in)           ::   kt          ! ocean model time step index 
     965      INTEGER, INTENT(in)           ::   k_fsbc      ! frequency of sbc (-> ice model) computation  
     966      INTEGER, INTENT(in)           ::   k_ice       ! ice management in the sbc (=0/1/2/3) 
    841967      !! 
    842968      LOGICAL  ::   llnewtx, llnewtau      ! update wind stress components and module?? 
     
    9841110      ENDIF 
    9851111 
    986 #if defined key_cpl_carbon_cycle 
    9871112      !                                                      ! ================== ! 
    9881113      !                                                      ! atmosph. CO2 (ppm) ! 
    9891114      !                                                      ! ================== ! 
    9901115      IF( srcv(jpr_co2)%laction )   atm_co2(:,:) = frcv(jpr_co2)%z3(:,:,1) 
    991 #endif 
     1116      !  
     1117      !                                                      ! ========================= !  
     1118      !                                                      ! Mean Sea Level Pressure   !   (taum)  
     1119      !                                                      ! ========================= !  
     1120      !  
     1121      IF( srcv(jpr_mslp)%laction ) THEN                    ! UKMO SHELF effect of atmospheric pressure on SSH  
     1122          IF( kt /= nit000 )   ssh_ibb(:,:) = ssh_ib(:,:)    !* Swap of ssh_ib fields  
     1123 
     1124          r1_grau = 1.e0 / (grav * rau0)               !* constant for optimization  
     1125          ssh_ib(:,:) = - ( frcv(jpr_mslp)%z3(:,:,1) - rpref ) * r1_grau    ! equivalent ssh (inverse barometer)  
     1126          apr   (:,:) =     frcv(jpr_mslp)%z3(:,:,1)                         !atmospheric pressure  
     1127     
     1128          IF( kt == nit000 ) ssh_ibb(:,:) = ssh_ib(:,:)  ! correct this later (read from restart if possible)  
     1129      END IF  
     1130      ! 
     1131      IF( ln_sdw ) THEN  ! Stokes Drift correction activated 
     1132      !                                                      ! ========================= !  
     1133      !                                                      !       Stokes drift u      ! 
     1134      !                                                      ! ========================= !  
     1135         IF( srcv(jpr_sdrftx)%laction ) zusd2dt(:,:) = frcv(jpr_sdrftx)%z3(:,:,1) 
     1136      ! 
     1137      !                                                      ! ========================= !  
     1138      !                                                      !       Stokes drift v      ! 
     1139      !                                                      ! ========================= !  
     1140         IF( srcv(jpr_sdrfty)%laction ) zvsd2dt(:,:) = frcv(jpr_sdrfty)%z3(:,:,1) 
     1141      ! 
     1142      !                                                      ! ========================= !  
     1143      !                                                      !      Wave mean period     ! 
     1144      !                                                      ! ========================= !  
     1145         IF( srcv(jpr_wper)%laction ) wmp(:,:) = frcv(jpr_wper)%z3(:,:,1) 
     1146      ! 
     1147      !                                                      ! ========================= !  
     1148      !                                                      !  Significant wave height  ! 
     1149      !                                                      ! ========================= !  
     1150         IF( srcv(jpr_hsig)%laction ) swh(:,:) = frcv(jpr_hsig)%z3(:,:,1) 
     1151      ! 
     1152      !                                                      ! ========================= !  
     1153      !                                                      !    Vertical mixing Qiao   ! 
     1154      !                                                      ! ========================= !  
     1155         IF( srcv(jpr_wnum)%laction .AND. ln_zdfqiao ) wnum(:,:) = frcv(jpr_wnum)%z3(:,:,1) 
     1156 
     1157         ! Calculate the 3D Stokes drift both in coupled and not fully uncoupled mode 
     1158         IF( srcv(jpr_sdrftx)%laction .OR. srcv(jpr_sdrfty)%laction .OR. srcv(jpr_wper)%laction & 
     1159                                                                    .OR. srcv(jpr_hsig)%laction ) THEN 
     1160            CALL sbc_stokes() 
     1161            IF( ln_zdfqiao .AND. .NOT. srcv(jpr_wnum)%laction ) CALL sbc_qiao() 
     1162         ENDIF 
     1163         IF( ln_zdfqiao .AND. srcv(jpr_wnum)%laction ) CALL sbc_qiao() 
     1164      ENDIF 
     1165      !                                                      ! ========================= !  
     1166      !                                                      ! Stress adsorbed by waves  ! 
     1167      !                                                      ! ========================= !  
     1168      IF( srcv(jpr_wstrf)%laction .AND. ln_tauoc ) tauoc_wave(:,:) = frcv(jpr_wstrf)%z3(:,:,1) 
     1169 
     1170      !                                                      ! ========================= !  
     1171      !                                                      !   Wave drag coefficient   ! 
     1172      !                                                      ! ========================= !  
     1173      IF( srcv(jpr_wdrag)%laction .AND. ln_cdgw ) cdn_wave(:,:) = frcv(jpr_wdrag)%z3(:,:,1) 
    9921174 
    9931175      !  Fields received by SAS when OASIS coupling 
     
    19192101         IF( ssnd(jps_hsnw)%laction )   CALL cpl_snd( jps_hsnw, isec, ztmp4, info ) 
    19202102      ENDIF 
    1921       ! 
    1922 #if defined key_cpl_carbon_cycle 
    19232103      !                                                      ! ------------------------- ! 
    19242104      !                                                      !  CO2 flux from PISCES     !  
    19252105      !                                                      ! ------------------------- ! 
    1926       IF( ssnd(jps_co2)%laction )   CALL cpl_snd( jps_co2, isec, RESHAPE ( oce_co2, (/jpi,jpj,1/) ) , info ) 
    1927       ! 
    1928 #endif 
     2106      IF( ssnd(jps_co2)%laction .AND. l_co2cpl )   CALL cpl_snd( jps_co2, isec, RESHAPE ( oce_co2, (/jpi,jpj,1/) ) , info ) 
     2107      ! 
    19292108      !                                                      ! ------------------------- ! 
    19302109      IF( ssnd(jps_ocx1)%laction ) THEN                      !      Surface current      ! 
     
    20632242      ENDIF 
    20642243      ! 
     2244      !                                                      ! ------------------------- !  
     2245      !                                                      !  Surface current to waves !  
     2246      !                                                      ! ------------------------- !  
     2247      IF( ssnd(jps_ocxw)%laction .OR. ssnd(jps_ocyw)%laction ) THEN  
     2248          !      
     2249          !                                                  j+1  j     -----V---F  
     2250          ! surface velocity always sent from T point                    !       |  
     2251          !                                                       j      |   T   U  
     2252          !                                                              |       |  
     2253          !                                                   j   j-1   -I-------|  
     2254          !                                               (for I)        |       |  
     2255          !                                                             i-1  i   i  
     2256          !                                                              i      i+1 (for I)  
     2257          SELECT CASE( TRIM( sn_snd_crtw%cldes ) )  
     2258          CASE( 'oce only'             )      ! C-grid ==> T  
     2259             DO jj = 2, jpjm1  
     2260                DO ji = fs_2, fs_jpim1   ! vector opt.  
     2261                   zotx1(ji,jj) = 0.5 * ( un(ji,jj,1) + un(ji-1,jj  ,1) )  
     2262                   zoty1(ji,jj) = 0.5 * ( vn(ji,jj,1) + vn(ji , jj-1,1) )   
     2263                END DO  
     2264             END DO  
     2265          CASE( 'weighted oce and ice' )     
     2266             SELECT CASE ( cp_ice_msh )  
     2267             CASE( 'C' )                      ! Ocean and Ice on C-grid ==> T  
     2268                DO jj = 2, jpjm1  
     2269                   DO ji = fs_2, fs_jpim1   ! vector opt.  
     2270                      zotx1(ji,jj) = 0.5 * ( un   (ji,jj,1) + un   (ji-1,jj  ,1) ) * zfr_l(ji,jj)    
     2271                      zoty1(ji,jj) = 0.5 * ( vn   (ji,jj,1) + vn   (ji  ,jj-1,1) ) * zfr_l(ji,jj)  
     2272                      zitx1(ji,jj) = 0.5 * ( u_ice(ji,jj  ) + u_ice(ji-1,jj    ) ) *  fr_i(ji,jj)  
     2273                      zity1(ji,jj) = 0.5 * ( v_ice(ji,jj  ) + v_ice(ji  ,jj-1  ) ) *  fr_i(ji,jj)  
     2274                   END DO  
     2275                END DO  
     2276             CASE( 'I' )                      ! Ocean on C grid, Ice on I-point (B-grid) ==> T  
     2277                DO jj = 2, jpjm1  
     2278                   DO ji = 2, jpim1   ! NO vector opt.  
     2279                      zotx1(ji,jj) = 0.5  * ( un(ji,jj,1)      + un(ji-1,jj  ,1) ) * zfr_l(ji,jj)    
     2280                      zoty1(ji,jj) = 0.5  * ( vn(ji,jj,1)      + vn(ji  ,jj-1,1) ) * zfr_l(ji,jj)    
     2281                      zitx1(ji,jj) = 0.25 * ( u_ice(ji+1,jj+1) + u_ice(ji,jj+1)                     &  
     2282                         &                  + u_ice(ji+1,jj  ) + u_ice(ji,jj  )  ) *  fr_i(ji,jj)  
     2283                      zity1(ji,jj) = 0.25 * ( v_ice(ji+1,jj+1) + v_ice(ji,jj+1)                     &  
     2284                         &                  + v_ice(ji+1,jj  ) + v_ice(ji,jj  )  ) *  fr_i(ji,jj)  
     2285                   END DO  
     2286                END DO  
     2287             CASE( 'F' )                      ! Ocean on C grid, Ice on F-point (B-grid) ==> T  
     2288                DO jj = 2, jpjm1  
     2289                   DO ji = 2, jpim1   ! NO vector opt.  
     2290                      zotx1(ji,jj) = 0.5  * ( un(ji,jj,1)      + un(ji-1,jj  ,1) ) * zfr_l(ji,jj)    
     2291                      zoty1(ji,jj) = 0.5  * ( vn(ji,jj,1)      + vn(ji  ,jj-1,1) ) * zfr_l(ji,jj)    
     2292                      zitx1(ji,jj) = 0.25 * ( u_ice(ji-1,jj-1) + u_ice(ji,jj-1)                     &  
     2293                         &                  + u_ice(ji-1,jj  ) + u_ice(ji,jj  )  ) *  fr_i(ji,jj)  
     2294                      zity1(ji,jj) = 0.25 * ( v_ice(ji-1,jj-1) + v_ice(ji,jj-1)                     &  
     2295                         &                  + v_ice(ji-1,jj  ) + v_ice(ji,jj  )  ) *  fr_i(ji,jj)  
     2296                   END DO  
     2297                END DO  
     2298             END SELECT  
     2299             CALL lbc_lnk( zitx1, 'T', -1. )   ;   CALL lbc_lnk( zity1, 'T', -1. )  
     2300          CASE( 'mixed oce-ice'        )  
     2301             SELECT CASE ( cp_ice_msh )  
     2302             CASE( 'C' )                      ! Ocean and Ice on C-grid ==> T  
     2303                DO jj = 2, jpjm1  
     2304                   DO ji = fs_2, fs_jpim1   ! vector opt.  
     2305                      zotx1(ji,jj) = 0.5 * ( un   (ji,jj,1) + un   (ji-1,jj  ,1) ) * zfr_l(ji,jj)   &  
     2306                         &         + 0.5 * ( u_ice(ji,jj  ) + u_ice(ji-1,jj    ) ) *  fr_i(ji,jj)  
     2307                      zoty1(ji,jj) = 0.5 * ( vn   (ji,jj,1) + vn   (ji  ,jj-1,1) ) * zfr_l(ji,jj)   &  
     2308                         &         + 0.5 * ( v_ice(ji,jj  ) + v_ice(ji  ,jj-1  ) ) *  fr_i(ji,jj)  
     2309                   END DO  
     2310                END DO  
     2311             CASE( 'I' )                      ! Ocean on C grid, Ice on I-point (B-grid) ==> T  
     2312                DO jj = 2, jpjm1  
     2313                   DO ji = 2, jpim1   ! NO vector opt.  
     2314                      zotx1(ji,jj) = 0.5  * ( un(ji,jj,1)      + un(ji-1,jj  ,1) ) * zfr_l(ji,jj)   &     
     2315                         &         + 0.25 * ( u_ice(ji+1,jj+1) + u_ice(ji,jj+1)                     &  
     2316                         &                  + u_ice(ji+1,jj  ) + u_ice(ji,jj  )  ) *  fr_i(ji,jj)  
     2317                      zoty1(ji,jj) = 0.5  * ( vn(ji,jj,1)      + vn(ji  ,jj-1,1) ) * zfr_l(ji,jj)   &   
     2318                         &         + 0.25 * ( v_ice(ji+1,jj+1) + v_ice(ji,jj+1)                     &  
     2319                         &                  + v_ice(ji+1,jj  ) + v_ice(ji,jj  )  ) *  fr_i(ji,jj)  
     2320                   END DO  
     2321                END DO  
     2322             CASE( 'F' )                      ! Ocean on C grid, Ice on F-point (B-grid) ==> T  
     2323                DO jj = 2, jpjm1  
     2324                   DO ji = 2, jpim1   ! NO vector opt.  
     2325                      zotx1(ji,jj) = 0.5  * ( un(ji,jj,1)      + un(ji-1,jj  ,1) ) * zfr_l(ji,jj)   &     
     2326                         &         + 0.25 * ( u_ice(ji-1,jj-1) + u_ice(ji,jj-1)                     &  
     2327                         &                  + u_ice(ji-1,jj  ) + u_ice(ji,jj  )  ) *  fr_i(ji,jj)  
     2328                      zoty1(ji,jj) = 0.5  * ( vn(ji,jj,1)      + vn(ji  ,jj-1,1) ) * zfr_l(ji,jj)   &   
     2329                         &         + 0.25 * ( v_ice(ji-1,jj-1) + v_ice(ji,jj-1)                     &  
     2330                         &                  + v_ice(ji-1,jj  ) + v_ice(ji,jj  )  ) *  fr_i(ji,jj)  
     2331                   END DO  
     2332                END DO  
     2333             END SELECT  
     2334          END SELECT  
     2335         CALL lbc_lnk( zotx1, ssnd(jps_ocxw)%clgrid, -1. )   ;   CALL lbc_lnk( zoty1, ssnd(jps_ocyw)%clgrid, -1. )  
     2336         !  
     2337         !  
     2338         IF( TRIM( sn_snd_crtw%clvor ) == 'eastward-northward' ) THEN             ! Rotation of the components  
     2339         !                                                                        ! Ocean component  
     2340            CALL rot_rep( zotx1, zoty1, ssnd(jps_ocxw)%clgrid, 'ij->e', ztmp1 )       ! 1st component   
     2341            CALL rot_rep( zotx1, zoty1, ssnd(jps_ocxw)%clgrid, 'ij->n', ztmp2 )       ! 2nd component   
     2342            zotx1(:,:) = ztmp1(:,:)                                                   ! overwrite the components   
     2343            zoty1(:,:) = ztmp2(:,:)   
     2344            IF( ssnd(jps_ivx1)%laction ) THEN                                     ! Ice component  
     2345               CALL rot_rep( zitx1, zity1, ssnd(jps_ivx1)%clgrid, 'ij->e', ztmp1 )    ! 1st component   
     2346               CALL rot_rep( zitx1, zity1, ssnd(jps_ivx1)%clgrid, 'ij->n', ztmp2 )    ! 2nd component   
     2347               zitx1(:,:) = ztmp1(:,:)                                                ! overwrite the components   
     2348               zity1(:,:) = ztmp2(:,:)  
     2349            ENDIF  
     2350         ENDIF  
     2351         !  
     2352!         ! spherical coordinates to cartesian -> 2 components to 3 components  
     2353!         IF( TRIM( sn_snd_crtw%clvref ) == 'cartesian' ) THEN  
     2354!            ztmp1(:,:) = zotx1(:,:)                     ! ocean currents  
     2355!            ztmp2(:,:) = zoty1(:,:)  
     2356!            CALL oce2geo ( ztmp1, ztmp2, 'T', zotx1, zoty1, zotz1 )  
     2357!            !  
     2358!            IF( ssnd(jps_ivx1)%laction ) THEN           ! ice velocities  
     2359!               ztmp1(:,:) = zitx1(:,:)  
     2360!               ztmp1(:,:) = zity1(:,:)  
     2361!               CALL oce2geo ( ztmp1, ztmp2, 'T', zitx1, zity1, zitz1 )  
     2362!            ENDIF  
     2363!         ENDIF  
     2364         !  
     2365         IF( ssnd(jps_ocxw)%laction )   CALL cpl_snd( jps_ocxw, isec, RESHAPE ( zotx1, (/jpi,jpj,1/) ), info )   ! ocean x current 1st grid  
     2366         IF( ssnd(jps_ocyw)%laction )   CALL cpl_snd( jps_ocyw, isec, RESHAPE ( zoty1, (/jpi,jpj,1/) ), info )   ! ocean y current 1st grid  
     2367         !   
     2368      ENDIF  
     2369      !  
     2370      IF( ssnd(jps_ficet)%laction ) THEN  
     2371         CALL cpl_snd( jps_ficet, isec, RESHAPE ( fr_i, (/jpi,jpj,1/) ), info )  
     2372      END IF  
     2373      !                                                      ! ------------------------- !  
     2374      !                                                      !   Water levels to waves   !  
     2375      !                                                      ! ------------------------- !  
     2376      IF( ssnd(jps_wlev)%laction ) THEN  
     2377         IF( ln_apr_dyn ) THEN   
     2378            IF( kt /= nit000 ) THEN   
     2379               ztmp1(:,:) = sshb(:,:) - 0.5 * ( ssh_ib(:,:) + ssh_ibb(:,:) )   
     2380            ELSE   
     2381               ztmp1(:,:) = sshb(:,:)   
     2382            ENDIF   
     2383         ELSE   
     2384            ztmp1(:,:) = sshn(:,:)   
     2385         ENDIF   
     2386         CALL cpl_snd( jps_wlev  , isec, RESHAPE ( ztmp1, (/jpi,jpj,1/) ), info )  
     2387      END IF  
    20652388      ! 
    20662389      !  Fields sent by OPA to SAS when doing OPA<->SAS coupling 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbcisf.F90

    r6140 r7403  
    9090      INTEGER, INTENT( in ) :: kt                   ! ocean time step 
    9191      ! 
    92       INTEGER               :: ji, jj               ! loop index 
     92      INTEGER               :: ji, jj, jk           ! loop index 
     93      INTEGER               :: ikt, ikb             ! loop index 
    9394      REAL(wp), DIMENSION (:,:), POINTER :: zt_frz, zdep ! freezing temperature (zt_frz) at depth (zdep)  
     95      REAL(wp), DIMENSION(:,:,:), POINTER :: zfwfisf3d, zqhcisf3d, zqlatisf3d 
     96      REAL(wp), DIMENSION(:,:  ), POINTER :: zqhcisf2d 
    9497      !!--------------------------------------------------------------------- 
    9598      ! 
     
    161164         CALL lbc_lnk(risf_tsc(:,:,jp_tem),'T',1.) 
    162165         CALL lbc_lnk(risf_tsc(:,:,jp_sal),'T',1.) 
    163          CALL lbc_lnk(fwfisf(:,:)         ,'T',1.) 
    164          CALL lbc_lnk(qisf(:,:)           ,'T',1.) 
     166         CALL lbc_lnk(fwfisf(:,:)   ,'T',1.) 
     167         CALL lbc_lnk(qisf(:,:)     ,'T',1.) 
     168 
     169!============================================================================================================================================= 
     170         IF ( iom_use('fwfisf3d') .OR. iom_use('qlatisf3d') .OR. iom_use('qhcisf3d') .OR. iom_use('qhcisf')) THEN 
     171            CALL wrk_alloc( jpi,jpj,jpk, zfwfisf3d, zqhcisf3d, zqlatisf3d ) 
     172            CALL wrk_alloc( jpi,jpj,     zqhcisf2d                        ) 
     173 
     174            zfwfisf3d(:,:,:) = 0.0_wp                         ! 3d ice shelf melting (kg/m2/s) 
     175            zqhcisf3d(:,:,:) = 0.0_wp                         ! 3d heat content flux (W/m2) 
     176            zqlatisf3d(:,:,:)= 0.0_wp                         ! 3d ice shelf melting latent heat flux (W/m2) 
     177            zqhcisf2d(:,:)   = fwfisf(:,:) * zt_frz * rcp     ! 2d heat content flux (W/m2) 
     178 
     179            DO jj = 1,jpj 
     180               DO ji = 1,jpi 
     181                  ikt = misfkt(ji,jj) 
     182                  ikb = misfkb(ji,jj) 
     183                  DO jk = ikt, ikb - 1 
     184                     zfwfisf3d (ji,jj,jk) = zfwfisf3d (ji,jj,jk) + fwfisf   (ji,jj) * r1_hisf_tbl(ji,jj) * e3t_n(ji,jj,jk) 
     185                     zqhcisf3d (ji,jj,jk) = zqhcisf3d (ji,jj,jk) + zqhcisf2d(ji,jj) * r1_hisf_tbl(ji,jj) * e3t_n(ji,jj,jk) 
     186                     zqlatisf3d(ji,jj,jk) = zqlatisf3d(ji,jj,jk) + qisf     (ji,jj) * r1_hisf_tbl(ji,jj) * e3t_n(ji,jj,jk) 
     187                  END DO 
     188                  zfwfisf3d (ji,jj,jk) = zfwfisf3d (ji,jj,jk) + fwfisf   (ji,jj) * r1_hisf_tbl(ji,jj) * ralpha(ji,jj) * e3t_n(ji,jj,jk) 
     189                  zqhcisf3d (ji,jj,jk) = zqhcisf3d (ji,jj,jk) + zqhcisf2d(ji,jj) * r1_hisf_tbl(ji,jj) * ralpha(ji,jj) * e3t_n(ji,jj,jk) 
     190                  zqlatisf3d(ji,jj,jk) = zqlatisf3d(ji,jj,jk) + qisf     (ji,jj) * r1_hisf_tbl(ji,jj) * ralpha(ji,jj) * e3t_n(ji,jj,jk) 
     191               END DO 
     192            END DO 
     193 
     194            CALL iom_put('fwfisf3d' , zfwfisf3d (:,:,:)) 
     195            CALL iom_put('qlatisf3d', zqlatisf3d(:,:,:)) 
     196            CALL iom_put('qhcisf3d' , zqhcisf3d (:,:,:)) 
     197            CALL iom_put('qhcisf'   , zqhcisf2d (:,:  )) 
     198 
     199            CALL wrk_dealloc( jpi,jpj,jpk, zfwfisf3d, zqhcisf3d, zqlatisf3d ) 
     200            CALL wrk_dealloc( jpi,jpj,     zqhcisf2d                        ) 
     201         END IF 
     202 
     203         ! output 
     204         CALL iom_put('qlatisf'  , qisf) 
     205         CALL iom_put('fwfisf', fwfisf) 
     206!============================================================================================================================================= 
    165207 
    166208         IF( kt == nit000 ) THEN                         !   set the forcing field at nit000 - 1    ! 
     
    177219         END IF 
    178220         !  
    179          ! output 
    180          CALL iom_put('qisf'  , qisf) 
    181          CALL iom_put('fwfisf', fwfisf) 
    182  
    183221         ! deallocation 
    184222         CALL wrk_dealloc( jpi,jpj, zt_frz, zdep  ) 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90

    r6460 r7403  
    8989      NAMELIST/namsbc/ nn_fsbc  , ln_ana   , ln_flx, ln_blk_clio, ln_blk_core, ln_blk_mfs,   & 
    9090         &             ln_cpl   , ln_mixcpl, nn_components      , nn_limflx  ,               & 
    91          &             ln_traqsr, ln_dm2dc ,                                                 &   
     91         &             ln_traqsr, ln_dm2dc ,                                                 & 
    9292         &             nn_ice   , nn_ice_embd,                                               & 
    9393         &             ln_rnf   , ln_ssr   , ln_isf   , nn_fwb    , ln_apr_dyn,              & 
    94          &             ln_wave  ,                                                            & 
    95          &             nn_lsm    
     94         &             ln_wave  , ln_cdgw  , ln_sdw   , ln_tauoc  , ln_stcor  ,              & 
     95         &             nn_lsm 
    9696      INTEGER  ::   ios 
    9797      INTEGER  ::   ierr, ierr0, ierr1, ierr2, ierr3, jpm 
     
    153153         WRITE(numout,*) '              closed sea (=0/1) (set in namdom)          nn_closea     = ', nn_closea 
    154154         WRITE(numout,*) '              nb of iterations if land-sea-mask applied  nn_lsm        = ', nn_lsm 
    155          WRITE(numout,*) '              surface wave                               ln_wave       = ', ln_wave   
     155         WRITE(numout,*) '              surface wave                               ln_wave       = ', ln_wave 
     156         WRITE(numout,*) '                 Stokes drift corr. to vert. velocity    ln_sdw        = ', ln_sdw 
     157         WRITE(numout,*) '                 wave modified ocean stress              ln_tauoc      = ', ln_tauoc 
     158         WRITE(numout,*) '                 Stokes coriolis term                    ln_stcor      = ', ln_stcor 
     159         WRITE(numout,*) '                 neutral drag coefficient (CORE, MFS)    ln_cdgw       = ', ln_cdgw 
    156160      ENDIF 
    157161      ! 
     
    220224         &   CALL ctl_stop( 'diurnal cycle into qsr field from daily values requires a flux or core-bulk formulation' ) 
    221225       
     226      IF ( ln_wave ) THEN 
     227      !Activated wave module but neither drag nor stokes drift activated 
     228         IF ( .NOT.(ln_cdgw .OR. ln_sdw .OR. ln_tauoc .OR. ln_stcor ) )   THEN 
     229            CALL ctl_warn( 'Ask for wave coupling but ln_cdgw=F, ln_sdw=F, ln_tauoc=F, ln_stcor=F') 
     230      !drag coefficient read from wave model definable only with mfs bulk formulae and core  
     231         ELSEIF (ln_cdgw .AND. .NOT.(ln_blk_mfs .OR. ln_blk_core) )       THEN        
     232             CALL ctl_stop( 'drag coefficient read from wave model definable only with mfs bulk formulae and core') 
     233         ELSEIF (ln_stcor .AND. .NOT. ln_sdw)                             THEN 
     234             CALL ctl_stop( 'Stokes-Coriolis term calculated only if activated Stokes Drift ln_sdw=T') 
     235         ENDIF 
     236      ELSE 
     237      IF ( ln_cdgw .OR. ln_sdw .OR. ln_tauoc .OR. ln_stcor )                &  
     238         &   CALL ctl_stop( 'Not Activated Wave Module (ln_wave=F) but asked coupling ',    & 
     239         &                  'with drag coefficient (ln_cdgw =T) '  ,                        & 
     240         &                  'or Stokes Drift (ln_sdw=T) ' ,                                 & 
     241         &                  'or ocean stress modification due to waves (ln_tauoc=T) ',      &   
     242         &                  'or Stokes-Coriolis term (ln_stcori=T)'  ) 
     243      ENDIF  
    222244      !                          ! Choice of the Surface Boudary Condition (set nsbc) 
    223245      ll_purecpl = ln_cpl .AND. .NOT. ln_mixcpl 
     
    357379            &                CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice )   ! OPA-SAS coupling: OPA receiving fields from SAS 
    358380      END SELECT 
    359  
     381      IF ( ln_wave .AND. ln_tauoc) THEN                                 ! Wave stress subctracted 
     382            utau(:,:) = utau(:,:)*tauoc_wave(:,:) 
     383            vtau(:,:) = vtau(:,:)*tauoc_wave(:,:) 
     384            taum(:,:) = taum(:,:)*tauoc_wave(:,:) 
     385      ! 
     386            SELECT CASE( nsbc ) 
     387            CASE(  0,1,2,3,5,-1 )  ; 
     388                IF(lwp .AND. kt == nit000 ) WRITE(numout,*) 'WARNING: You are subtracting the wave stress to the ocean. & 
     389                        & If not requested select ln_tauoc=.false' 
     390            END SELECT 
     391      ! 
     392      END IF 
    360393      IF( ln_mixcpl )        CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice )   ! forced-coupled mixed formulation after forcing 
    361394 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbcwave.F90

    r6140 r7403  
    44   !! Wave module  
    55   !!====================================================================== 
    6    !! History :  3.3  !   2011-09  (Adani M)  Original code: Drag Coefficient  
    7    !!         :  3.4  !   2012-10  (Adani M)                 Stokes Drift  
    8    !!---------------------------------------------------------------------- 
    9  
    10    !!---------------------------------------------------------------------- 
    11    !!   sbc_wave      : read drag coefficient from wave model in netcdf files  
     6   !! History :  3.3  !   2011-09  (M. Adani)  Original code: Drag Coefficient  
     7   !!         :  3.4  !   2012-10  (M. Adani)  Stokes Drift  
     8   !!            3.6  !   2014-09  (E. Clementi,P. Oddo) New Stokes Drift Computation 
     9   !!---------------------------------------------------------------------- 
     10 
     11   !!---------------------------------------------------------------------- 
     12   !!   sbc_wave      : wave data from wave model in netcdf files  
    1213   !!---------------------------------------------------------------------- 
    1314   USE oce            !  
    14    USE sbc_oce        ! Surface boundary condition: ocean fields 
     15   USE sbc_oce       ! Surface boundary condition: ocean fields 
    1516   USE bdy_oce        ! 
    1617   USE domvvl         ! 
    17    ! 
    1818   USE iom            ! I/O manager library 
    1919   USE in_out_manager ! I/O manager 
    2020   USE lib_mpp        ! distribued memory computing library 
    21    USE fldread        ! read input fields 
     21   USE fldread       ! read input fields 
    2222   USE wrk_nemo       ! 
     23   USE phycst         ! physical constants  
    2324 
    2425   IMPLICIT NONE 
    2526   PRIVATE 
    2627 
    27    PUBLIC   sbc_wave    ! routine called in sbc_blk_core or sbc_blk_mfs 
     28   PUBLIC   sbc_stokes, sbc_qiao  ! routines called in sbccpl 
     29   PUBLIC   sbc_wave    ! routine called in sbcmod 
    2830    
    29    INTEGER , PARAMETER ::   jpfld  = 3   ! maximum number of files to read for srokes drift 
    30    INTEGER , PARAMETER ::   jp_usd = 1   ! index of stokes drift  (i-component) (m/s)    at T-point 
    31    INTEGER , PARAMETER ::   jp_vsd = 2   ! index of stokes drift  (j-component) (m/s)    at T-point 
    32    INTEGER , PARAMETER ::   jp_wn  = 3   ! index of wave number                 (1/m)    at T-point 
    33  
    34    TYPE(FLD), ALLOCATABLE, DIMENSION(:)  :: sf_cd    ! structure of input fields (file informations, fields read) Drag Coefficient 
    35    TYPE(FLD), ALLOCATABLE, DIMENSION(:)  :: sf_sd    ! structure of input fields (file informations, fields read) Stokes Drift 
    36  
    37    REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION (:,:)   :: cdn_wave  
    38    REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION (:,:,:) :: usd3d, vsd3d, wsd3d  
    39    REAL(wp),         ALLOCATABLE, DIMENSION (:,:)   :: usd2d, vsd2d, uwavenum, vwavenum  
     31   ! Variables checking if the wave parameters are coupled (if not, they are read from file) 
     32   LOGICAL, PUBLIC     ::   cpl_hsig=.FALSE. 
     33   LOGICAL, PUBLIC     ::   cpl_phioc=.FALSE. 
     34   LOGICAL, PUBLIC     ::   cpl_sdrftx=.FALSE. 
     35   LOGICAL, PUBLIC     ::   cpl_sdrfty=.FALSE. 
     36   LOGICAL, PUBLIC     ::   cpl_wper=.FALSE. 
     37   LOGICAL, PUBLIC     ::   cpl_wnum=.FALSE. 
     38   LOGICAL, PUBLIC     ::   cpl_wstrf=.FALSE. 
     39   LOGICAL, PUBLIC     ::   cpl_wdrag=.FALSE. 
     40 
     41   INTEGER ::   jpfld                ! number of files to read for stokes drift 
     42   INTEGER ::   jp_usd               ! index of stokes drift  (i-component) (m/s)    at T-point 
     43   INTEGER ::   jp_vsd               ! index of stokes drift  (j-component) (m/s)    at T-point 
     44   INTEGER ::   jp_swh               ! index of significant wave hight      (m)      at T-point 
     45   INTEGER ::   jp_wmp               ! index of mean wave period            (s)      at T-point 
     46 
     47   TYPE(FLD), ALLOCATABLE, DIMENSION(:)  :: sf_cd    ! structure of input fields (file informations, fields read) Drag Coefficient 
     48   TYPE(FLD), ALLOCATABLE, DIMENSION(:)  :: sf_sd    ! structure of input fields (file informations, fields read) Stokes Drift 
     49   TYPE(FLD), ALLOCATABLE, DIMENSION(:)  :: sf_wn    ! structure of input fields (file informations, fields read) wave number for Qiao 
     50   TYPE(FLD), ALLOCATABLE, DIMENSION(:)  :: sf_tauoc ! structure of input fields (file informations, fields read) normalized wave stress into the ocean 
     51   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:)       :: cdn_wave  
     52   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:)       :: swh,wmp, wnum 
     53   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:)       :: tauoc_wave 
     54   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:)       :: tsd2d 
     55   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:)       :: zusd2dt, zvsd2dt 
     56   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:,:)     :: usd3d, vsd3d, wsd3d  
     57   REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:,:)     :: usd3dt, vsd3dt 
    4058 
    4159   !! * Substitutions 
     
    4866CONTAINS 
    4967 
     68   SUBROUTINE sbc_stokes( ) 
     69      !!--------------------------------------------------------------------- 
     70      !!                     ***  ROUTINE sbc_stokes  *** 
     71      !! 
     72      !! ** Purpose :   compute the 3d Stokes Drift according to Breivik et al., 
     73      !!                2014 (DOI: 10.1175/JPO-D-14-0020.1) 
     74      !! 
     75      !! ** Method  : - Calculate Stokes transport speed  
     76      !!              - Calculate horizontal divergence  
     77      !!              - Integrate the horizontal divergenze from the bottom  
     78      !! ** action   
     79      !!--------------------------------------------------------------------- 
     80      INTEGER                ::   jj,ji,jk  
     81      REAL(wp)                       ::  ztransp, zfac, zsp0, zk, zus, zvs 
     82      REAL(wp), DIMENSION(:,:,:), POINTER :: ze3hdiv   ! 3D workspace 
     83      !!--------------------------------------------------------------------- 
     84      ! 
     85 
     86      CALL wrk_alloc( jpi,jpj,jpk, ze3hdiv ) 
     87      DO jk = 1, jpk 
     88         DO jj = 1, jpj 
     89            DO ji = 1, jpi 
     90               ! On T grid 
     91               ! Stokes transport speed estimated from Hs and Tmean 
     92               ztransp = 2.0_wp*rpi*swh(ji,jj)**2.0_wp/(16.0_wp*MAX(wmp(ji,jj),0.0000001_wp)) 
     93               ! Stokes surface speed 
     94               zsp0 = SQRT( zusd2dt(ji,jj)**2 + zvsd2dt(ji,jj)**2) 
     95               ! Wavenumber scale 
     96               zk = ABS(zsp0)/MAX(ABS(5.97_wp*ztransp),0.0000001_wp) 
     97               ! Depth attenuation 
     98               zfac = EXP(-2.0_wp*zk*gdept_n(ji,jj,jk))/(1.0_wp+8.0_wp*zk*gdept_n(ji,jj,jk)) 
     99               ! 
     100               usd3dt(ji,jj,jk) = zfac * zusd2dt(ji,jj) * tmask(ji,jj,jk) 
     101               vsd3dt(ji,jj,jk) = zfac * zvsd2dt(ji,jj) * tmask(ji,jj,jk) 
     102            END DO 
     103         END DO 
     104      END DO  
     105      ! Into the U and V Grid 
     106      DO jk = 1, jpkm1 
     107         DO jj = 1, jpjm1 
     108            DO ji = 1, fs_jpim1 
     109               usd3d(ji,jj,jk) = 0.5 *  umask(ji,jj,jk) *   & 
     110                               &  ( usd3dt(ji,jj,jk) + usd3dt(ji+1,jj,jk) ) 
     111               vsd3d(ji,jj,jk) = 0.5 *  vmask(ji,jj,jk) *   & 
     112                               &  ( vsd3dt(ji,jj,jk) + vsd3dt(ji,jj+1,jk) ) 
     113            END DO 
     114         END DO 
     115      END DO 
     116      ! 
     117      CALL lbc_lnk( usd3d(:,:,:), 'U', -1. ) 
     118      CALL lbc_lnk( vsd3d(:,:,:), 'V', -1. ) 
     119      ! 
     120      DO jk = 1, jpkm1               ! Horizontal divergence 
     121         DO jj = 2, jpj 
     122            DO ji = fs_2, jpi 
     123               ze3hdiv(ji,jj,jk) = (  e2u(ji  ,jj) * usd3d(ji  ,jj,jk)     & 
     124                  &                 - e2u(ji-1,jj) * usd3d(ji-1,jj,jk)     & 
     125                  &                 + e1v(ji,jj  ) * vsd3d(ji,jj  ,jk)     & 
     126                  &                 - e1v(ji,jj-1) * vsd3d(ji,jj-1,jk)   ) * r1_e1e2t(ji,jj) 
     127            END DO 
     128         END DO 
     129      END DO 
     130      ! 
     131      IF( .NOT. AGRIF_Root() ) THEN 
     132         IF( nbondi ==  1 .OR. nbondi == 2 )   ze3hdiv(nlci-1,   :  ,:) = 0._wp      ! east 
     133         IF( nbondi == -1 .OR. nbondi == 2 )   ze3hdiv(  2   ,   :  ,:) = 0._wp      ! west 
     134         IF( nbondj ==  1 .OR. nbondj == 2 )   ze3hdiv(  :   ,nlcj-1,:) = 0._wp      ! north 
     135         IF( nbondj == -1 .OR. nbondj == 2 )   ze3hdiv(  :   ,  2   ,:) = 0._wp      ! south 
     136      ENDIF 
     137      ! 
     138      CALL lbc_lnk( ze3hdiv, 'T', 1. ) 
     139      ! 
     140      DO jk = jpkm1, 1, -1                   ! integrate from the bottom the e3t * hor. divergence 
     141         wsd3d(:,:,jk) = wsd3d(:,:,jk+1) - e3t_n(:,:,jk) * ze3hdiv(:,:,jk) 
     142      END DO 
     143#if defined key_bdy 
     144      IF( lk_bdy ) THEN 
     145         DO jk = 1, jpkm1 
     146            wsd3d(:,:,jk) = wsd3d(:,:,jk) * bdytmask(:,:) 
     147         END DO 
     148      ENDIF 
     149#endif 
     150      CALL wrk_dealloc( jpi,jpj,jpk, ze3hdiv ) 
     151      ! 
     152   END SUBROUTINE sbc_stokes 
     153 
     154   SUBROUTINE sbc_qiao 
     155      !!--------------------------------------------------------------------- 
     156      !!                     ***  ROUTINE sbc_qiao  *** 
     157      !! 
     158      !! ** Purpose :   Qiao formulation for wave enhanced turbulence 
     159      !!                2010 (DOI: 10.1007/s10236-010-0326)  
     160      !! 
     161      !! ** Method  : -  
     162      !! ** action   
     163      !!--------------------------------------------------------------------- 
     164      INTEGER :: jj, ji 
     165 
     166      ! Calculate the module of the stokes drift on T grid 
     167      !------------------------------------------------- 
     168      DO jj = 1, jpj 
     169         DO ji = 1, jpi 
     170            tsd2d(ji,jj) = SQRT( zusd2dt(ji,jj) * zusd2dt(ji,jj) + zvsd2dt(ji,jj) * zvsd2dt(ji,jj) ) 
     171         END DO 
     172      END DO 
     173      ! 
     174   END SUBROUTINE sbc_qiao 
     175 
    50176   SUBROUTINE sbc_wave( kt ) 
    51177      !!--------------------------------------------------------------------- 
    52       !!                     ***  ROUTINE sbc_apr  *** 
    53       !! 
    54       !! ** Purpose :   read drag coefficient from wave model  in netcdf files. 
     178      !!                     ***  ROUTINE sbc_wave  *** 
     179      !! 
     180      !! ** Purpose :   read wave parameters from wave model  in netcdf files. 
    55181      !! 
    56182      !! ** Method  : - Read namelist namsbc_wave 
    57183      !!              - Read Cd_n10 fields in netcdf files  
    58184      !!              - Read stokes drift 2d in netcdf files  
    59       !!              - Read wave number      in netcdf files  
    60       !!              - Compute 3d stokes drift using monochromatic 
    61       !! ** action  :    
    62       !!--------------------------------------------------------------------- 
    63       INTEGER, INTENT( in  ) ::   kt       ! ocean time step 
     185      !!              - Read wave number in netcdf files  
     186      !!              - Compute 3d stokes drift using Breivik et al.,2014 
     187      !!                formulation 
     188      !! ** action   
     189      !!--------------------------------------------------------------------- 
     190      USE zdf_oce,  ONLY : ln_zdfqiao 
     191 
     192      INTEGER, INTENT( in  ) :: kt       ! ocean time step 
    64193      ! 
    65194      INTEGER                ::   ierror   ! return error code 
    66       INTEGER                ::   ifpr, jj,ji,jk  
    67       INTEGER                ::   ios     ! Local integer output status for namelist read 
    68       TYPE(FLD_N), DIMENSION(jpfld) ::   slf_i     ! array of namelist informations on the fields to read 
     195      INTEGER                ::   ifpr 
     196      INTEGER                ::   ios      ! Local integer output status for namelist read 
     197      ! 
    69198      CHARACTER(len=100)     ::  cn_dir                          ! Root directory for location of drag coefficient files 
    70       TYPE(FLD_N)            ::  sn_cdg, sn_usd, sn_vsd, sn_wn   ! informations about the fields to be read 
    71       REAL(wp), DIMENSION(:,:,:), POINTER ::   zusd_t, zvsd_t, ze3hdiv   ! 3D workspace 
    72       !! 
    73       NAMELIST/namsbc_wave/  sn_cdg, cn_dir, sn_usd, sn_vsd, sn_wn, ln_cdgw , ln_sdw 
     199      TYPE(FLD_N), ALLOCATABLE, DIMENSION(:) ::   slf_i     ! array of namelist informations on the fields to read 
     200      TYPE(FLD_N)            ::  sn_cdg, sn_usd, sn_vsd,  & 
     201                             &   sn_swh, sn_wmp, sn_wnum, sn_tauoc      ! informations about the fields to be read 
     202      !! 
     203      NAMELIST/namsbc_wave/  sn_cdg, cn_dir, sn_usd, sn_vsd, sn_swh, sn_wmp, sn_wnum, sn_tauoc 
    74204      !!--------------------------------------------------------------------- 
    75205      ! 
     
    80210         READ  ( numnam_ref, namsbc_wave, IOSTAT = ios, ERR = 901) 
    81211901      IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsbc_wave in reference namelist', lwp ) 
    82          ! 
     212          
    83213         REWIND( numnam_cfg )              ! Namelist namsbc_wave in configuration namelist : File for drag coeff. from wave model 
    84214         READ  ( numnam_cfg, namsbc_wave, IOSTAT = ios, ERR = 902 ) 
     
    86216         IF(lwm) WRITE ( numond, namsbc_wave ) 
    87217         ! 
    88          IF(lwp) THEN               ! Control print 
    89             WRITE(numout,*) '        Namelist namsbc_wave : surface wave setting'  
    90             WRITE(numout,*) '           wave drag coefficient                      ln_cdgw  = ', ln_cdgw   
    91             WRITE(numout,*) '           wave stokes drift                          ln_sdw   = ', ln_sdw 
    92          ENDIF 
    93          ! 
    94          IF( .NOT.( ln_cdgw .OR. ln_sdw ) )    & 
    95             &  CALL ctl_warn( 'ln_sbcwave=T but nor drag coefficient (ln_cdgw=F) neither stokes drift activated (ln_sdw=F)' ) 
    96          IF( ln_cdgw .AND. .NOT.(ln_blk_mfs .OR. ln_blk_core) )   &        
    97             &  CALL ctl_stop( 'drag coefficient read from wave model definable only with mfs bulk formulae and core') 
    98          ! 
    99218         IF( ln_cdgw ) THEN 
    100             ALLOCATE( sf_cd(1), STAT=ierror )           !* allocate and fill sf_wave with sn_cdg 
    101             IF( ierror > 0 )   CALL ctl_stop( 'STOP', 'sbc_wave: unable to allocate sf_wave structure' ) 
    102             ! 
    103                                    ALLOCATE( sf_cd(1)%fnow(jpi,jpj,1)   ) 
    104             IF( sn_cdg%ln_tint )   ALLOCATE( sf_cd(1)%fdta(jpi,jpj,1,2) ) 
    105             CALL fld_fill( sf_cd, (/ sn_cdg /), cn_dir, 'sbc_wave', 'Wave module ', 'namsbc_wave' ) 
     219            IF( .NOT. cpl_wdrag ) THEN 
     220               ALLOCATE( sf_cd(1), STAT=ierror )           !* allocate and fill sf_wave with sn_cdg 
     221               IF( ierror > 0 )   CALL ctl_stop( 'STOP', 'sbc_wave: unable to allocate sf_wave structure' ) 
     222               ! 
     223                                      ALLOCATE( sf_cd(1)%fnow(jpi,jpj,1)   ) 
     224               IF( sn_cdg%ln_tint )   ALLOCATE( sf_cd(1)%fdta(jpi,jpj,1,2) ) 
     225               CALL fld_fill( sf_cd, (/ sn_cdg /), cn_dir, 'sbc_wave', 'Wave module ', 'namsbc_wave' ) 
     226            ENDIF 
    106227            ALLOCATE( cdn_wave(jpi,jpj) ) 
    107             cdn_wave(:,:) = 0.0 
    108          ENDIF 
     228         ENDIF 
     229 
     230         IF( ln_tauoc ) THEN 
     231            IF( .NOT. cpl_wstrf ) THEN 
     232               ALLOCATE( sf_tauoc(1), STAT=ierror )           !* allocate and fill sf_wave with sn_tauoc 
     233               IF( ierror > 0 )   CALL ctl_stop( 'STOP', 'sbc_wave: unable to allocate sf_wave structure' ) 
     234               ! 
     235                                       ALLOCATE( sf_tauoc(1)%fnow(jpi,jpj,1)   ) 
     236               IF( sn_tauoc%ln_tint )  ALLOCATE( sf_tauoc(1)%fdta(jpi,jpj,1,2) ) 
     237               CALL fld_fill( sf_tauoc, (/ sn_tauoc /), cn_dir, 'sbc_wave', 'Wave module', 'namsbc_wave' ) 
     238            ENDIF 
     239            ALLOCATE( tauoc_wave(jpi,jpj) ) 
     240         ENDIF 
     241 
    109242         IF( ln_sdw ) THEN 
    110             slf_i(jp_usd) = sn_usd ; slf_i(jp_vsd) = sn_vsd; slf_i(jp_wn) = sn_wn 
    111             ALLOCATE( sf_sd(3), STAT=ierror )           !* allocate and fill sf_wave with sn_cdg 
    112             IF( ierror > 0 )   CALL ctl_stop( 'STOP', 'sbc_wave: unable to allocate sf_wave structure' ) 
    113             ! 
    114             DO ifpr= 1, jpfld 
    115                ALLOCATE( sf_sd(ifpr)%fnow(jpi,jpj,1) ) 
    116                IF( slf_i(ifpr)%ln_tint )   ALLOCATE( sf_sd(ifpr)%fdta(jpi,jpj,1,2) ) 
    117             END DO 
    118             CALL fld_fill( sf_sd, slf_i, cn_dir, 'sbc_wave', 'Wave module ', 'namsbc_wave' ) 
    119             ALLOCATE( usd2d(jpi,jpj) , vsd2d(jpi,jpj) , uwavenum(jpi,jpj) , vwavenum(jpi,jpj) ) 
     243            ! Find out how many fields have to be read from file if not coupled 
     244            jpfld=0 
     245            jp_usd=0; jp_vsd=0; jp_swh=0; jp_wmp=0 
     246            IF( .NOT. cpl_sdrftx ) THEN 
     247               jpfld=jpfld+1 
     248               jp_usd=jpfld 
     249            ENDIF 
     250            IF( .NOT. cpl_sdrfty ) THEN 
     251               jpfld=jpfld+1 
     252               jp_vsd=jpfld 
     253            ENDIF 
     254            IF( .NOT. cpl_hsig ) THEN 
     255               jpfld=jpfld+1 
     256               jp_swh=jpfld 
     257            ENDIF 
     258            IF( .NOT. cpl_wper ) THEN 
     259               jpfld=jpfld+1 
     260               jp_wmp=jpfld 
     261            ENDIF 
     262 
     263            ! Read from file only the non-coupled fields  
     264            IF( jpfld > 0 ) THEN 
     265               ALLOCATE( slf_i(jpfld) ) 
     266               IF( jp_usd > 0 ) slf_i(jp_usd) = sn_usd 
     267               IF( jp_vsd > 0 ) slf_i(jp_vsd) = sn_vsd 
     268               IF( jp_swh > 0 ) slf_i(jp_swh) = sn_swh 
     269               IF( jp_wmp > 0 ) slf_i(jp_wmp) = sn_wmp 
     270               ALLOCATE( sf_sd(jpfld), STAT=ierror )           !* allocate and fill sf_sd with stokes drift 
     271               IF( ierror > 0 )   CALL ctl_stop( 'STOP', 'sbc_wave: unable to allocate sf_wave structure' ) 
     272               ! 
     273               DO ifpr= 1, jpfld 
     274                  ALLOCATE( sf_sd(ifpr)%fnow(jpi,jpj,1) ) 
     275                  IF( slf_i(ifpr)%ln_tint )   ALLOCATE( sf_sd(ifpr)%fdta(jpi,jpj,1,2) ) 
     276               END DO 
     277 
     278               CALL fld_fill( sf_sd, slf_i, cn_dir, 'sbc_wave', 'Wave module ', 'namsbc_wave' ) 
     279            ENDIF 
    120280            ALLOCATE( usd3d(jpi,jpj,jpk),vsd3d(jpi,jpj,jpk),wsd3d(jpi,jpj,jpk) ) 
    121             usd3d(:,:,:) = 0._wp   ;   usd2d(:,:) = 0._wp   ;    uwavenum(:,:) = 0._wp 
    122             vsd3d(:,:,:) = 0._wp   ;   vsd2d(:,:) = 0._wp   ;    vwavenum(:,:) = 0._wp 
     281            ALLOCATE( usd3dt(jpi,jpj,jpk),vsd3dt(jpi,jpj,jpk) ) 
     282            ALLOCATE( swh(jpi,jpj), wmp(jpi,jpj) ) 
     283            ALLOCATE( zusd2dt(jpi,jpj), zvsd2dt(jpi,jpj) ) 
     284            usd3d(:,:,:) = 0._wp 
     285            vsd3d(:,:,:) = 0._wp 
    123286            wsd3d(:,:,:) = 0._wp 
    124          ENDIF 
    125       ENDIF 
    126       ! 
    127       IF( ln_cdgw ) THEN               !==  Neutral drag coefficient  ==! 
     287            IF( ln_zdfqiao ) THEN     !==  Vertical mixing enhancement using Qiao,2010  ==! 
     288               IF( .NOT. cpl_wnum ) THEN 
     289                  ALLOCATE( sf_wn(1), STAT=ierror )           !* allocate and fill sf_wave with sn_wnum 
     290                  IF( ierror > 0 )   CALL ctl_stop( 'STOP', 'sbc_wave: unable toallocate sf_wave structure' ) 
     291                                         ALLOCATE( sf_wn(1)%fnow(jpi,jpj,1)   ) 
     292                  IF( sn_wnum%ln_tint )  ALLOCATE( sf_wn(1)%fdta(jpi,jpj,1,2) ) 
     293                  CALL fld_fill( sf_wn, (/ sn_wnum /), cn_dir, 'sbc_wave', 'Wave module', 'namsbc_wave' ) 
     294               ENDIF 
     295               ALLOCATE( wnum(jpi,jpj),tsd2d(jpi,jpj) ) 
     296            ENDIF 
     297         ENDIF 
     298      ENDIF 
     299      ! 
     300      IF( ln_cdgw .AND. .NOT. cpl_wdrag ) THEN              !==  Neutral drag coefficient  ==! 
    128301         CALL fld_read( kt, nn_fsbc, sf_cd )      ! read from external forcing 
    129302         cdn_wave(:,:) = sf_cd(1)%fnow(:,:,1) 
    130303      ENDIF 
    131       ! 
    132       IF( ln_sdw )  THEN               !==  Computation of the 3d Stokes Drift  ==! 
     304 
     305      IF( ln_tauoc .AND. .NOT. cpl_wstrf ) THEN             !==  Wave induced stress  ==! 
     306         CALL fld_read( kt, nn_fsbc, sf_tauoc )      !* read wave norm stress from external forcing 
     307         tauoc_wave(:,:) = sf_tauoc(1)%fnow(:,:,1) 
     308      ENDIF 
     309 
     310      IF( ln_sdw )  THEN                         !==  Computation of the 3d Stokes Drift  ==!  
    133311         ! 
    134          CALL wrk_alloc( jpi,jpj,jpk,   zusd_t, zvsd_t, ze3hdiv ) 
     312         ! Read from file only if the field is not coupled 
     313         IF( jpfld > 0 ) THEN 
     314            CALL fld_read( kt, nn_fsbc, sf_sd )      !* read wave parameters from external forcing 
     315            IF( jp_swh > 0 ) swh(:,:)     = sf_sd(jp_swh)%fnow(:,:,1)   ! significant wave height 
     316            IF( jp_wmp > 0 ) wmp(:,:)     = sf_sd(jp_wmp)%fnow(:,:,1)   ! wave mean period 
     317            IF( jp_usd > 0 ) zusd2dt(:,:) = sf_sd(jp_usd)%fnow(:,:,1)   ! 2D zonal Stokes Drift at T point 
     318            IF( jp_vsd > 0 ) zvsd2dt(:,:) = sf_sd(jp_vsd)%fnow(:,:,1)   ! 2D meridional Stokes Drift at T point 
     319         ENDIF 
    135320         ! 
    136          CALL fld_read( kt, nn_fsbc, sf_sd )    !* read drag coefficient from external forcing 
     321         ! Read also wave number if needed, so that it is available in coupling routines 
     322         IF( ln_zdfqiao .AND. .NOT. cpl_wnum ) THEN 
     323            CALL fld_read( kt, nn_fsbc, sf_wn )      !* read wave parameters from external forcing 
     324            wnum(:,:) = sf_wn(1)%fnow(:,:,1) 
     325         ENDIF 
     326            
     327         !==  Computation of the 3d Stokes Drift according to Breivik et al.,2014 
     328         !(DOI: 10.1175/JPO-D-14-0020.1)==!  
    137329         ! 
    138          DO jk = 1, jpkm1                       !* distribute it on the vertical 
    139             zusd_t(:,:,jk) = sf_sd(jp_usd)%fnow(:,:,1) * EXP( -2._wp * sf_sd(jp_wn)%fnow(:,:,1) * gdept_n(:,:,jk) ) 
    140             zvsd_t(:,:,jk) = sf_sd(jp_vsd)%fnow(:,:,1) * EXP( -2._wp * sf_sd(jp_wn)%fnow(:,:,1) * gdept_n(:,:,jk) ) 
    141          END DO 
    142          DO jk = 1, jpkm1                       !* interpolate the stokes drift from t-point to u- and v-points 
    143             DO jj = 1, jpjm1 
    144                DO ji = 1, jpim1 
    145                    usd3d(ji,jj,jk) = 0.5_wp * ( zusd_t(ji  ,jj,jk) + zusd_t(ji+1,jj,jk) ) * umask(ji,jj,jk) 
    146                    vsd3d(ji,jj,jk) = 0.5_wp * ( zvsd_t(ji  ,jj,jk) + zvsd_t(ji,jj+1,jk) ) * vmask(ji,jj,jk) 
    147                END DO 
    148             END DO 
    149          END DO 
    150          CALL lbc_lnk( usd3d(:,:,:), 'U', -1. ) 
    151          CALL lbc_lnk( vsd3d(:,:,:), 'V', -1. ) 
    152          ! 
    153          DO jk = 1, jpkm1                       !* e3t * Horizontal divergence  ==! 
    154             DO jj = 2, jpjm1 
    155                DO ji = fs_2, fs_jpim1   ! vector opt. 
    156                   ze3hdiv(ji,jj,jk) = (  e2u(ji  ,jj) * e3u_n(ji  ,jj,jk) * usd3d(ji  ,jj,jk)     & 
    157                      &                 - e2u(ji-1,jj) * e3u_n(ji-1,jj,jk) * usd3d(ji-1,jj,jk)     & 
    158                      &                 + e1v(ji,jj  ) * e3v_n(ji,jj  ,jk) * vsd3d(ji,jj  ,jk)     & 
    159                      &                 - e1v(ji,jj-1) * e3v_n(ji,jj-1,jk) * vsd3d(ji,jj-1,jk)   ) * r1_e1e2t(ji,jj) 
    160                END DO   
    161             END DO   
    162             IF( .NOT. AGRIF_Root() ) THEN 
    163                IF( nbondi ==  1 .OR. nbondi == 2 )   ze3hdiv(nlci-1,   :  ,jk) = 0._wp      ! east 
    164                IF( nbondi == -1 .OR. nbondi == 2 )   ze3hdiv(  2   ,   :  ,jk) = 0._wp      ! west 
    165                IF( nbondj ==  1 .OR. nbondj == 2 )   ze3hdiv(  :   ,nlcj-1,jk) = 0._wp      ! north 
    166                IF( nbondj == -1 .OR. nbondj == 2 )   ze3hdiv(  :   ,  2   ,jk) = 0._wp      ! south 
    167             ENDIF 
    168          END DO 
    169          CALL lbc_lnk( ze3hdiv, 'T', 1. )  
    170          ! 
    171          DO jk = jpkm1, 1, -1                   !* integrate from the bottom the e3t * hor. divergence 
    172             wsd3d(:,:,jk) = wsd3d(:,:,jk+1) - ze3hdiv(:,:,jk) 
    173          END DO 
    174 #if defined key_bdy 
    175          IF( lk_bdy ) THEN 
    176             DO jk = 1, jpkm1 
    177                wsd3d(:,:,jk) = wsd3d(:,:,jk) * bdytmask(:,:) 
    178             END DO 
    179          ENDIF 
    180 #endif 
    181          CALL wrk_dealloc( jpi,jpj,jpk,   zusd_t, zvsd_t, ze3hdiv ) 
    182          !  
     330         ! Calculate only if no necessary fields are coupled, if not calculate later after coupling 
     331         IF( jpfld == 4 ) THEN 
     332            CALL sbc_stokes() 
     333            IF( ln_zdfqiao .AND. .NOT. cpl_wnum ) THEN 
     334               CALL sbc_qiao() 
     335            ENDIF 
     336         ENDIF 
    183337      ENDIF 
    184338      ! 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90

    r6140 r7403  
    99   !!            3.7  !  2014-05  (G. Madec)  Add 2nd/4th order cases for CEN and FCT schemes  
    1010   !!             -   !  2014-12  (G. Madec) suppression of cross land advection option 
     11   !!            3.6  !  2015-06  (E. Clementi) Addition of Stokes drift in case of wave coupling 
    1112   !!---------------------------------------------------------------------- 
    1213 
     
    2627   USE ldftra         ! lateral diffusion: eddy diffusivity & EIV coeff. 
    2728   USE ldfslp         ! Lateral diffusion: slopes of neutral surfaces 
     29   USE trd_oce         ! trends: ocean variables 
     30   USE trdtra          ! trends manager: tracers  
    2831   ! 
    2932   USE in_out_manager ! I/O manager 
     
    3336   USE wrk_nemo       ! Memory Allocation 
    3437   USE timing         ! Timing 
    35  
    36    USE diaptr          ! Poleward heat transport  
     38   USE sbcwave        ! wave module 
     39   USE sbc_oce        ! surface boundary condition: ocean 
     40   USE diaptr         ! Poleward heat transport  
    3741 
    3842   IMPLICIT NONE 
     
    8690      INTEGER ::   jk   ! dummy loop index 
    8791      REAL(wp), POINTER, DIMENSION(:,:,:) :: zun, zvn, zwn 
     92      REAL(wp), POINTER, DIMENSION(:,:,:) ::   ztrdt, ztrds   ! 3D workspace 
    8893      !!---------------------------------------------------------------------- 
    8994      ! 
     
    9398      ! 
    9499      !                                          ! set time step 
     100      zun(:,:,:) = 0.0 
     101      zvn(:,:,:) = 0.0 
     102      zwn(:,:,:) = 0.0 
     103      !     
    95104      IF( neuler == 0 .AND. kt == nit000 ) THEN     ! at nit000 
    96105         r2dt = rdt                                 ! = rdt (restarting with Euler time stepping) 
     
    100109      ! 
    101110      !                                         !==  effective transport  ==! 
    102       DO jk = 1, jpkm1 
    103          zun(:,:,jk) = e2u  (:,:) * e3u_n(:,:,jk) * un(:,:,jk)                  ! eulerian transport only 
    104          zvn(:,:,jk) = e1v  (:,:) * e3v_n(:,:,jk) * vn(:,:,jk) 
    105          zwn(:,:,jk) = e1e2t(:,:)                 * wn(:,:,jk) 
    106       END DO 
     111      IF( ln_wave .AND. ln_sdw )  THEN 
     112         DO jk = 1, jpkm1 
     113            zun(:,:,jk) = e2u(:,:) * e3u_n(:,:,jk) *      & 
     114                        &  ( un(:,:,jk) + usd3d(:,:,jk) )                       ! eulerian transport + Stokes Drift 
     115            zvn(:,:,jk) = e1v(:,:) * e3v_n(:,:,jk) *      & 
     116                        &  ( vn(:,:,jk) + vsd3d(:,:,jk) ) 
     117            zwn(:,:,jk) = e1e2t(:,:) *                    & 
     118                        &  ( wn(:,:,jk) + wsd3d(:,:,jk) ) 
     119         END DO 
     120      ELSE 
     121         DO jk = 1, jpkm1 
     122            zun(:,:,jk) = e2u  (:,:) * e3u_n(:,:,jk) * un(:,:,jk)               ! eulerian transport only 
     123            zvn(:,:,jk) = e1v  (:,:) * e3v_n(:,:,jk) * vn(:,:,jk) 
     124            zwn(:,:,jk) = e1e2t(:,:)                 * wn(:,:,jk) 
     125         END DO 
     126      ENDIF 
    107127      ! 
    108128      IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN                                ! add z-tilde and/or vvl corrections 
     
    127147      IF( ln_diaptr )   CALL dia_ptr( zvn )                                    ! diagnose the effective MSF  
    128148!!gm ??? 
     149      ! 
     150      IF( l_trdtra )   THEN                    !* Save ta and sa trends 
     151         CALL wrk_alloc( jpi, jpj, jpk, ztrdt, ztrds ) 
     152         ztrdt(:,:,:) = tsa(:,:,:,jp_tem) 
     153         ztrds(:,:,:) = tsa(:,:,:,jp_sal) 
     154      ENDIF 
    129155      ! 
    130156      SELECT CASE ( nadv )                      !==  compute advection trend and add it to general trend  ==! 
     
    145171      END SELECT 
    146172      ! 
    147       !                                         ! print mean trends (used for debugging) 
     173      IF( l_trdtra )   THEN                      ! save the advective trends for further diagnostics 
     174         DO jk = 1, jpkm1 
     175            ztrdt(:,:,jk) = tsa(:,:,jk,jp_tem) - ztrdt(:,:,jk) 
     176            ztrds(:,:,jk) = tsa(:,:,jk,jp_sal) - ztrds(:,:,jk) 
     177         END DO 
     178         CALL trd_tra( kt, 'TRA', jp_tem, jptra_totad, ztrdt ) 
     179         CALL trd_tra( kt, 'TRA', jp_sal, jptra_totad, ztrds ) 
     180         CALL wrk_dealloc( jpi, jpj, jpk, ztrdt, ztrds ) 
     181      ENDIF 
     182      !                                              ! print mean trends (used for debugging) 
    148183      IF(ln_ctl)   CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' adv  - Ta: ', mask1=tmask,               & 
    149184         &                       tab3d_2=tsa(:,:,:,jp_sal), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_cen.F90

    r6140 r7403  
    1818   USE trdtra         ! trends manager: tracers  
    1919   USE diaptr         ! poleward transport diagnostics 
     20   USE diaar5         ! AR5 diagnostics 
    2021   ! 
    2122   USE in_out_manager ! I/O manager 
     
    3233    
    3334   REAL(wp) ::   r1_6 = 1._wp / 6._wp   ! =1/6 
     35 
     36   LOGICAL :: l_trd   ! flag to compute trends 
     37   LOGICAL :: l_ptr   ! flag to compute poleward transport 
     38   LOGICAL :: l_hst   ! flag to compute heat/salt transport 
    3439 
    3540   !! * Substitutions 
     
    8893      ENDIF 
    8994      ! 
     95      l_trd = .FALSE. 
     96      l_hst = .FALSE. 
     97      l_ptr = .FALSE. 
     98      IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) )        l_trd = .TRUE. 
     99      IF(   cdtype == 'TRA' .AND. ln_diaptr )                                                 l_ptr = .TRUE.  
     100      IF(   cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 
     101         &                          iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) )   l_hst = .TRUE. 
     102      ! 
    90103      !                     
    91104      zwz(:,:, 1 ) = 0._wp       ! surface & bottom vertical flux set to zero for all tracers 
     
    184197         END DO 
    185198         !                             ! trend diagnostics 
    186          IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) ) THEN 
     199         IF( l_trd ) THEN 
    187200            CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pun, ptn(:,:,:,jn) ) 
    188201            CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pvn, ptn(:,:,:,jn) ) 
    189202            CALL trd_tra( kt, cdtype, jn, jptra_zad, zwz, pwn, ptn(:,:,:,jn) ) 
    190203         END IF 
    191          !                             ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
    192          IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN   
    193            IF( jn == jp_tem )   htr_adv(:) = ptr_sj( zwy(:,:,:) ) 
    194            IF( jn == jp_sal )   str_adv(:) = ptr_sj( zwy(:,:,:) ) 
    195          ENDIF 
     204         !                                 ! "Poleward" heat and salt transports  
     205         IF( l_ptr )  CALL dia_ptr_hst( jn, 'adv', zwy(:,:,:) ) 
     206         !                                 !  heat and salt transport 
     207         IF( l_hst )  CALL dia_ar5_hst( jn, 'adv', zwx(:,:,:), zwy(:,:,:) ) 
    196208         ! 
    197209      END DO 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_fct.F90

    r6771 r7403  
    2020   USE trdtra         ! tracers trends 
    2121   USE diaptr         ! poleward transport diagnostics 
     22   USE diaar5         ! AR5 diagnostics 
     23   USE phycst, ONLY: rau0_rcp 
    2224   ! 
    2325   USE in_out_manager ! I/O manager 
     26   USE iom 
    2427   USE lib_mpp        ! MPP library 
    2528   USE lbclnk         ! ocean lateral boundary condition (or mpp link)  
     
    3639 
    3740   LOGICAL  ::   l_trd   ! flag to compute trends 
     41   LOGICAL  ::   l_ptr   ! flag to compute poleward transport 
     42   LOGICAL  ::   l_hst   ! flag to compute heat/salt transport 
    3843   REAL(wp) ::   r1_6 = 1._wp / 6._wp   ! =1/6 
    3944 
     
    8085      REAL(wp) ::   zfm_ui, zfm_vj, zfm_wk, zC2t_v, zC4t_v   !   -      - 
    8186      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zwi, zwx, zwy, zwz, ztu, ztv, zltu, zltv, ztw 
    82       REAL(wp), POINTER, DIMENSION(:,:,:) ::   ztrdx, ztrdy, ztrdz 
     87      REAL(wp), POINTER, DIMENSION(:,:,:) ::   ztrdx, ztrdy, ztrdz, zptry 
     88      REAL(wp), POINTER, DIMENSION(:,:)   :: z2d 
    8389      !!---------------------------------------------------------------------- 
    8490      ! 
     
    94100      ! 
    95101      l_trd = .FALSE. 
    96       IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) )   l_trd = .TRUE. 
    97       ! 
    98       IF( l_trd )  THEN 
     102      l_hst = .FALSE. 
     103      l_ptr = .FALSE. 
     104      IF( ( cdtype == 'TRA'   .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) )     l_trd = .TRUE. 
     105      IF(   cdtype == 'TRA'   .AND. ln_diaptr )                                              l_ptr = .TRUE.  
     106      IF(   cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 
     107         &                          iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) )  l_hst = .TRUE. 
     108      ! 
     109      IF( l_trd .OR. l_hst )  THEN 
    99110         CALL wrk_alloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz ) 
    100111         ztrdx(:,:,:) = 0._wp   ;    ztrdy(:,:,:) = 0._wp   ;   ztrdz(:,:,:) = 0._wp 
    101112      ENDIF 
    102113      ! 
     114      IF( l_ptr ) THEN   
     115         CALL wrk_alloc( jpi, jpj, jpk, zptry ) 
     116         zptry(:,:,:) = 0._wp 
     117      ENDIF 
    103118      !                          ! surface & bottom value : flux set to zero one for all 
    104119      zwz(:,:, 1 ) = 0._wp             
     
    161176         CALL lbc_lnk( zwi, 'T', 1. )  ! Lateral boundary conditions on zwi  (unchanged sign) 
    162177         !                 
    163          IF( l_trd )  THEN             ! trend diagnostics (contribution of upstream fluxes) 
     178         IF( l_trd .OR. l_hst )  THEN             ! trend diagnostics (contribution of upstream fluxes) 
    164179            ztrdx(:,:,:) = zwx(:,:,:)   ;   ztrdy(:,:,:) = zwy(:,:,:)   ;   ztrdz(:,:,:) = zwz(:,:,:) 
    165180         END IF 
    166181         !                             ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
    167          IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN   
    168            IF( jn == jp_tem )  htr_adv(:) = ptr_sj( zwy(:,:,:) ) 
    169            IF( jn == jp_sal )  str_adv(:) = ptr_sj( zwy(:,:,:) ) 
    170          ENDIF 
     182         IF( l_ptr )  zptry(:,:,:) = zwy(:,:,:)  
    171183         ! 
    172184         !        !==  anti-diffusive flux : high order minus low order  ==! 
     
    292304         END DO 
    293305         ! 
    294          IF( l_trd ) THEN     ! trend diagnostics (contribution of upstream fluxes) 
     306         IF( l_trd .OR. l_hst ) THEN     ! trend diagnostics (contribution of upstream fluxes) 
    295307            ztrdx(:,:,:) = ztrdx(:,:,:) + zwx(:,:,:)  ! <<< Add to previously computed 
    296308            ztrdy(:,:,:) = ztrdy(:,:,:) + zwy(:,:,:)  ! <<< Add to previously computed 
    297309            ztrdz(:,:,:) = ztrdz(:,:,:) + zwz(:,:,:)  ! <<< Add to previously computed 
    298             ! 
     310         ENDIF 
     311            ! 
     312         IF( l_trd ) THEN  
    299313            CALL trd_tra( kt, cdtype, jn, jptra_xad, ztrdx, pun, ptn(:,:,:,jn) ) 
    300314            CALL trd_tra( kt, cdtype, jn, jptra_yad, ztrdy, pvn, ptn(:,:,:,jn) ) 
    301315            CALL trd_tra( kt, cdtype, jn, jptra_zad, ztrdz, pwn, ptn(:,:,:,jn) ) 
    302316            ! 
    303             CALL wrk_dealloc( jpi,jpj,jpk,   ztrdx, ztrdy, ztrdz ) 
    304317         END IF 
    305          !                    ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
    306          IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN   
    307            IF( jn == jp_tem )   htr_adv(:) = htr_adv(:) + ptr_sj( zwy(:,:,:) ) 
    308            IF( jn == jp_sal )   str_adv(:) = str_adv(:) + ptr_sj( zwy(:,:,:) ) 
     318         !                                !  heat/salt transport 
     319         IF( l_hst )  CALL dia_ar5_hst( jn, 'adv', ztrdx(:,:,:), ztrdy(:,:,:) ) 
     320 
     321         !                                ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
     322         IF( l_ptr ) THEN   
     323            zptry(:,:,:) = zptry(:,:,:) + zwy(:,:,:)  ! <<< Add to previously computed 
     324            CALL dia_ptr_hst( jn, 'adv', zptry(:,:,:) ) 
    309325         ENDIF 
    310326         ! 
    311327      END DO                     ! end of tracer loop 
    312328      ! 
    313       CALL wrk_dealloc( jpi,jpj,jpk,    zwi, zwx, zwy, zwz, ztu, ztv, zltu, zltv, ztw ) 
     329                              CALL wrk_dealloc( jpi,jpj,jpk,    zwi, zwx, zwy, zwz, ztu, ztv, zltu, zltv, ztw ) 
     330      IF( l_trd .OR. l_hst )  CALL wrk_dealloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz ) 
     331      IF( l_ptr )             CALL wrk_dealloc( jpi, jpj, jpk, zptry ) 
    314332      ! 
    315333      IF( nn_timing == 1 )  CALL timing_stop('tra_adv_fct') 
     
    357375      REAL(wp), POINTER, DIMENSION(:,:,:)   ::   zwi, zwx, zwy, zwz, zhdiv, zwzts, zwz_sav 
    358376      REAL(wp), POINTER, DIMENSION(:,:,:)   ::   ztrdx, ztrdy, ztrdz 
     377      REAL(wp), POINTER, DIMENSION(:,:,:) :: zptry 
    359378      REAL(wp), POINTER, DIMENSION(:,:,:,:) ::   ztrs 
    360379      !!---------------------------------------------------------------------- 
     
    373392      ! 
    374393      l_trd = .FALSE. 
    375       IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) )   l_trd = .TRUE. 
    376       ! 
    377       IF( l_trd )  THEN 
     394      l_hst = .FALSE. 
     395      l_ptr = .FALSE. 
     396      IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) )      l_trd = .TRUE. 
     397      IF(   cdtype == 'TRA' .AND. ln_diaptr )                                               l_ptr = .TRUE.  
     398      IF(   cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 
     399         &                          iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) ) l_hst = .TRUE. 
     400      ! 
     401      IF( l_trd .OR. l_hst )  THEN 
    378402         CALL wrk_alloc( jpi,jpj,jpk,   ztrdx, ztrdy, ztrdz ) 
    379403         ztrdx(:,:,:) = 0._wp  ;    ztrdy(:,:,:) = 0._wp  ;   ztrdz(:,:,:) = 0._wp 
    380404      ENDIF 
    381405      ! 
     406      IF( l_ptr ) THEN   
     407         CALL wrk_alloc( jpi, jpj,jpk, zptry ) 
     408         zptry(:,:,:) = 0._wp 
     409      ENDIF 
    382410      zwi(:,:,:) = 0._wp 
    383411      z_rzts = 1._wp / REAL( kn_fct_zts, wp ) 
     
    445473         CALL lbc_lnk( zwi, 'T', 1. )     ! Lateral boundary conditions on zwi  (unchanged sign) 
    446474         !                 
    447          IF( l_trd )  THEN                ! trend diagnostics (contribution of upstream fluxes) 
     475         IF( l_trd .OR. l_hst )  THEN                ! trend diagnostics (contribution of upstream fluxes) 
    448476            ztrdx(:,:,:) = zwx(:,:,:)   ;    ztrdy(:,:,:) = zwy(:,:,:)  ;   ztrdz(:,:,:) = zwz(:,:,:) 
    449477         END IF 
    450478         !                                ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
    451          IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN   
    452            IF( jn == jp_tem )  htr_adv(:) = ptr_sj( zwy(:,:,:) ) 
    453            IF( jn == jp_sal )  str_adv(:) = ptr_sj( zwy(:,:,:) ) 
    454          ENDIF 
     479         IF( l_ptr )  zptry(:,:,:) = zwy(:,:,:) 
    455480 
    456481         ! 3. anti-diffusive flux : high order minus low order 
     
    568593         END DO 
    569594 
    570          !                                 ! trend diagnostics (contribution of upstream fluxes) 
    571          IF( l_trd )  THEN  
     595        ! 
     596         IF( l_trd .OR. l_hst ) THEN     ! trend diagnostics (contribution of upstream fluxes) 
    572597            ztrdx(:,:,:) = ztrdx(:,:,:) + zwx(:,:,:)  ! <<< Add to previously computed 
    573598            ztrdy(:,:,:) = ztrdy(:,:,:) + zwy(:,:,:)  ! <<< Add to previously computed 
    574599            ztrdz(:,:,:) = ztrdz(:,:,:) + zwz(:,:,:)  ! <<< Add to previously computed 
    575             ! 
    576             CALL trd_tra( kt, cdtype, jn, jptra_xad, ztrdx, pun, ptn(:,:,:,jn) )    
    577             CALL trd_tra( kt, cdtype, jn, jptra_yad, ztrdy, pvn, ptn(:,:,:,jn) )   
    578             CALL trd_tra( kt, cdtype, jn, jptra_zad, ztrdz, pwn, ptn(:,:,:,jn) )  
    579             ! 
    580             CALL wrk_dealloc( jpi,jpj,jpk,   ztrdx, ztrdy, ztrdz ) 
     600         ENDIF 
     601            ! 
     602         IF( l_trd ) THEN  
     603            CALL trd_tra( kt, cdtype, jn, jptra_xad, ztrdx, pun, ptn(:,:,:,jn) ) 
     604            CALL trd_tra( kt, cdtype, jn, jptra_yad, ztrdy, pvn, ptn(:,:,:,jn) ) 
     605            CALL trd_tra( kt, cdtype, jn, jptra_zad, ztrdz, pwn, ptn(:,:,:,jn) ) 
     606            ! 
    581607         END IF 
    582          !                                 ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
    583          IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN   
    584            IF( jn == jp_tem )  htr_adv(:) = ptr_sj( zwy(:,:,:) ) + htr_adv(:) 
    585            IF( jn == jp_sal )  str_adv(:) = ptr_sj( zwy(:,:,:) ) + str_adv(:) 
     608         !                                             ! heat/salt transport 
     609         IF( l_hst )  CALL dia_ar5_hst( jn, 'adv', ztrdx(:,:,:), ztrdy(:,:,:) ) 
     610 
     611         !                                            ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
     612         IF( l_ptr ) THEN   
     613            zptry(:,:,:) = zptry(:,:,:) + zwy(:,:,:)  ! <<< Add to previously computed 
     614            CALL dia_ptr_hst( jn, 'adv', zptry(:,:,:) ) 
    586615         ENDIF 
    587616         ! 
    588617      END DO 
    589618      ! 
    590       CALL wrk_alloc( jpi,jpj,             zwx_sav, zwy_sav ) 
    591       CALL wrk_alloc( jpi,jpj, jpk,        zwx, zwy, zwz, zwi, zhdiv, zwzts, zwz_sav ) 
    592       CALL wrk_alloc( jpi,jpj,jpk,kjpt+1,  ztrs ) 
     619                              CALL wrk_alloc( jpi,jpj,             zwx_sav, zwy_sav ) 
     620                              CALL wrk_alloc( jpi,jpj, jpk,        zwx, zwy, zwz, zwi, zhdiv, zwzts, zwz_sav ) 
     621                              CALL wrk_alloc( jpi,jpj,jpk,kjpt+1,  ztrs ) 
     622      IF( l_trd .OR. l_hst )  CALL wrk_dealloc( jpi, jpj, jpk, ztrdx, ztrdy, ztrdz ) 
     623      IF( l_ptr )             CALL wrk_dealloc( jpi, jpj, jpk, zptry ) 
    593624      ! 
    594625      IF( nn_timing == 1 )  CALL timing_stop('tra_adv_fct_zts') 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_mus.F90

    r6140 r7403  
    2323   USE sbcrnf         ! river runoffs 
    2424   USE diaptr         ! poleward transport diagnostics 
     25   USE diaar5         ! AR5 diagnostics 
     26 
    2527   ! 
     28   USE iom 
    2629   USE wrk_nemo       ! Memory Allocation 
    2730   USE timing         ! Timing 
     
    4043   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xind     !: mixed upstream/centered index 
    4144    
     45   LOGICAL  ::   l_trd   ! flag to compute trends 
     46   LOGICAL  ::   l_ptr   ! flag to compute poleward transport 
     47   LOGICAL  ::   l_hst   ! flag to compute heat/salt transport 
     48 
    4249   !! * Substitutions 
    4350#  include "vectopt_loop_substitute.h90" 
     
    116123      ENDIF  
    117124      !       
     125      l_trd = .FALSE. 
     126      l_hst = .FALSE. 
     127      l_ptr = .FALSE. 
     128      IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) )      l_trd = .TRUE. 
     129      IF(   cdtype == 'TRA' .AND. ln_diaptr )                                               l_ptr = .TRUE.  
     130      IF(   cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 
     131         &                          iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) ) l_hst = .TRUE. 
     132      ! 
    118133      DO jn = 1, kjpt            !==  loop over the tracers  ==! 
    119134         ! 
     
    192207         END DO         
    193208         !                                ! trend diagnostics 
    194          IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR.   & 
    195             &( cdtype == 'TRC' .AND. l_trdtrc )      )  THEN 
     209         IF( l_trd )  THEN 
    196210            CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pun, ptb(:,:,:,jn) ) 
    197211            CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pvn, ptb(:,:,:,jn) ) 
    198212         END IF 
    199          !                                ! "Poleward" heat and salt transports 
    200          IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN   
    201             IF( jn == jp_tem )  htr_adv(:) = ptr_sj( zwy(:,:,:) ) 
    202             IF( jn == jp_sal )  str_adv(:) = ptr_sj( zwy(:,:,:) ) 
    203          ENDIF 
     213         !                                 ! "Poleward" heat and salt transports  
     214         IF( l_ptr )  CALL dia_ptr_hst( jn, 'adv', zwy(:,:,:) ) 
     215         !                                 !  heat transport 
     216         IF( l_hst )  CALL dia_ar5_hst( jn, 'adv', zwx(:,:,:), zwy(:,:,:) ) 
    204217         ! 
    205218         !                          !* Vertical advective fluxes 
     
    262275         END DO 
    263276         !                                ! send trends for diagnostic 
    264          IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR.     & 
    265             &( cdtype == 'TRC' .AND. l_trdtrc )      )   & 
    266             CALL trd_tra( kt, cdtype, jn, jptra_zad, zwx, pwn, ptb(:,:,:,jn) ) 
     277         IF( l_trd )  CALL trd_tra( kt, cdtype, jn, jptra_zad, zwx, pwn, ptb(:,:,:,jn) ) 
    267278         ! 
    268279      END DO                     ! end of tracer loop 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_qck.F90

    r6140 r7403  
    3434   PUBLIC   tra_adv_qck   ! routine called by step.F90 
    3535 
    36    LOGICAL  :: l_trd           ! flag to compute trends 
    3736   REAL(wp) :: r1_6 = 1./ 6.   ! 1/6 ratio 
     37 
     38   LOGICAL  ::   l_trd   ! flag to compute trends 
     39   LOGICAL  ::   l_ptr   ! flag to compute poleward transport 
     40 
    3841 
    3942   !! * Substitutions 
     
    103106      ! 
    104107      l_trd = .FALSE. 
    105       IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) )   l_trd = .TRUE. 
     108      l_ptr = .FALSE. 
     109      IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) )      l_trd = .TRUE. 
     110      IF(   cdtype == 'TRA' .AND. ln_diaptr )                                               l_ptr = .TRUE.  
     111      ! 
    106112      ! 
    107113      !        ! horizontal fluxes are computed with the QUICKEST + ULTIMATE scheme 
     
    224230         END DO 
    225231         !                                 ! trend diagnostics 
    226          IF( l_trd )   CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pun, ptn(:,:,:,jn) ) 
     232         IF( l_trd )                     CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pun, ptn(:,:,:,jn) ) 
    227233         ! 
    228234      END DO 
     
    347353         END DO 
    348354         !                                 ! trend diagnostics 
    349          IF( l_trd )   CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pvn, ptn(:,:,:,jn) ) 
     355         IF( l_trd )                     CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pvn, ptn(:,:,:,jn) ) 
    350356         !                                 ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
    351          IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN   
    352            IF( jn == jp_tem )  htr_adv(:) = ptr_sj( zwy(:,:,:) ) 
    353            IF( jn == jp_sal )  str_adv(:) = ptr_sj( zwy(:,:,:) ) 
    354          ENDIF 
     357         IF( l_ptr )                     CALL dia_ptr_hst( jn, 'adv', zwy(:,:,:) ) 
    355358         ! 
    356359      END DO 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_ubs.F90

    r6140 r7403  
    1919   USE trdtra         ! trends manager: tracers  
    2020   USE diaptr         ! poleward transport diagnostics 
     21   USE diaar5         ! AR5 diagnostics 
     22 
    2123   ! 
     24   USE iom 
    2225   USE lib_mpp        ! I/O library 
    2326   USE lbclnk         ! ocean lateral boundary condition (or mpp link) 
     
    3235   PUBLIC   tra_adv_ubs   ! routine called by traadv module 
    3336 
    34    LOGICAL :: l_trd  ! flag to compute trends or not 
     37   LOGICAL :: l_trd   ! flag to compute trends 
     38   LOGICAL :: l_ptr   ! flag to compute poleward transport 
     39   LOGICAL :: l_hst   ! flag to compute heat transport 
     40 
    3541 
    3642   !! * Substitutions 
     
    109115      ! 
    110116      l_trd = .FALSE. 
    111       IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) ) l_trd = .TRUE. 
     117      l_hst = .FALSE. 
     118      l_ptr = .FALSE. 
     119      IF( ( cdtype == 'TRA' .AND. l_trdtra ) .OR. ( cdtype == 'TRC' .AND. l_trdtrc ) )      l_trd = .TRUE. 
     120      IF(   cdtype == 'TRA' .AND. ln_diaptr )                                               l_ptr = .TRUE.  
     121      IF(   cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 
     122         &                          iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) ) l_hst = .TRUE. 
    112123      ! 
    113124      ztw (:,:, 1 ) = 0._wp      ! surface & bottom value : set to zero for all tracers 
     
    176187             CALL trd_tra( kt, cdtype, jn, jptra_yad, ztv, pvn, ptn(:,:,:,jn) ) 
    177188         END IF 
    178          !                                 ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
    179          IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN   
    180             IF( jn == jp_tem )  htr_adv(:) = ptr_sj( ztv(:,:,:) ) 
    181             IF( jn == jp_sal )  str_adv(:) = ptr_sj( ztv(:,:,:) ) 
    182          ENDIF 
     189         !      
     190         !                                ! "Poleward" heat and salt transports (contribution of upstream fluxes) 
     191         IF( l_ptr )  CALL dia_ptr_hst( jn, 'adv', ztv(:,:,:) ) 
     192         !                                !  heati/salt transport 
     193         IF( l_hst )  CALL dia_ar5_hst( jn, 'adv', ztu(:,:,:), ztv(:,:,:) ) 
     194         ! 
    183195         ! 
    184196         !                       !== vertical advective trend  ==! 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_iso.F90

    r6140 r7403  
    2424   USE ldfslp         ! iso-neutral slopes 
    2525   USE diaptr         ! poleward transport diagnostics 
     26   USE diaar5         ! AR5 diagnostics 
    2627   ! 
    2728   USE in_out_manager ! I/O manager 
     
    3637 
    3738   PUBLIC   tra_ldf_iso   ! routine called by step.F90 
     39 
     40   LOGICAL  ::   l_ptr   ! flag to compute poleward transport 
     41   LOGICAL  ::   l_hst   ! flag to compute heat transport 
    3842 
    3943   !! * Substitutions 
     
    107111      REAL(wp) ::  zmskv, zahv_w, zabe2, zcof2, zcoef4   !   -      - 
    108112      REAL(wp) ::  zcoef0, ze3w_2, zsign, z2dt, z1_2dt   !   -      - 
    109 #if defined key_diaar5 
    110       REAL(wp) ::   zztmp   ! local scalar 
    111 #endif 
    112113      REAL(wp), POINTER, DIMENSION(:,:)   ::   zdkt, zdk1t, z2d 
    113114      REAL(wp), POINTER, DIMENSION(:,:,:) ::   zdit, zdjt, zftu, zftv, ztfw  
     
    127128         ah_wslp2(:,:,:) = 0._wp 
    128129      ENDIF 
    129       !                                               ! set time step size (Euler/Leapfrog) 
     130      !    
     131      l_hst = .FALSE. 
     132      l_ptr = .FALSE. 
     133      IF( cdtype == 'TRA' .AND. ln_diaptr )                                                 l_ptr = .TRUE.  
     134      IF( cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 
     135         &                        iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) )   l_hst = .TRUE. 
     136      ! 
     137      !                                            ! set time step size (Euler/Leapfrog) 
    130138      IF( neuler == 0 .AND. kt == nit000 ) THEN   ;   z2dt =     rdt      ! at nit000   (Euler) 
    131139      ELSE                                        ;   z2dt = 2.* rdt      !             (Leapfrog) 
     
    369377            ! 
    370378            !                             ! "Poleward" diffusive heat or salt transports (T-S case only) 
    371             IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN 
    372                ! note sign is reversed to give down-gradient diffusive transports (#1043) 
    373                IF( jn == jp_tem)   htr_ldf(:) = ptr_sj( -zftv(:,:,:) ) 
    374                IF( jn == jp_sal)   str_ldf(:) = ptr_sj( -zftv(:,:,:) ) 
    375             ENDIF 
    376             ! 
    377             IF( iom_use("udiff_heattr") .OR. iom_use("vdiff_heattr") ) THEN 
    378               ! 
    379               IF( cdtype == 'TRA' .AND. jn == jp_tem  ) THEN 
    380                   z2d(:,:) = zftu(ji,jj,1)  
    381                   DO jk = 2, jpkm1 
    382                      DO jj = 2, jpjm1 
    383                         DO ji = fs_2, fs_jpim1   ! vector opt. 
    384                            z2d(ji,jj) = z2d(ji,jj) + zftu(ji,jj,jk)  
    385                         END DO 
    386                      END DO 
    387                   END DO 
    388 !!gm CAUTION I think there is an error of sign when using BLP operator.... 
    389 !!gm         a multiplication by zsign is required (to be checked twice !) 
    390                   z2d(:,:) = - rau0_rcp * z2d(:,:)     ! note sign is reversed to give down-gradient diffusive transports (#1043) 
    391                   CALL lbc_lnk( z2d, 'U', -1. ) 
    392                   CALL iom_put( "udiff_heattr", z2d )                  ! heat transport in i-direction 
    393                   ! 
    394                   z2d(:,:) = zftv(ji,jj,1)  
    395                   DO jk = 2, jpkm1 
    396                      DO jj = 2, jpjm1 
    397                         DO ji = fs_2, fs_jpim1   ! vector opt. 
    398                            z2d(ji,jj) = z2d(ji,jj) + zftv(ji,jj,jk)  
    399                         END DO 
    400                      END DO 
    401                   END DO 
    402                   z2d(:,:) = - rau0_rcp * z2d(:,:)     ! note sign is reversed to give down-gradient diffusive transports (#1043) 
    403                   CALL lbc_lnk( z2d, 'V', -1. ) 
    404                   CALL iom_put( "vdiff_heattr", z2d )                  !  heat transport in i-direction 
    405                END IF 
    406                ! 
    407             ENDIF 
     379               ! note sign is reversed to give down-gradient diffusive transports ) 
     380            IF( l_ptr )  CALL dia_ptr_hst( jn, 'ldf', -zftv(:,:,:)  ) 
     381            !                          ! Diffusive heat transports 
     382            IF( l_hst )  CALL dia_ar5_hst( jn, 'ldf', -zftu(:,:,:), -zftv(:,:,:) ) 
    408383            ! 
    409384         ENDIF                                                    !== end pass selection  ==! 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_lap_blp.F90

    r6140 r7403  
    1717   USE traldf_triad   ! iso-neutral lateral diffusion (triad    operator)     (tra_ldf_triad routine) 
    1818   USE diaptr         ! poleward transport diagnostics 
     19   USE diaar5         ! AR5 diagnostics 
    1920   USE trc_oce        ! share passive tracers/Ocean variables 
    2021   USE zpshde         ! partial step: hor. derivative     (zps_hde routine) 
     
    2526   USE timing         ! Timing 
    2627   USE wrk_nemo       ! Memory allocation 
     28   USE iom 
    2729 
    2830   IMPLICIT NONE 
     
    3941   INTEGER, PARAMETER, PUBLIC ::   np_lap_i  = 11   ,   np_blp_i  = 21  ! standard iso-neutral or geopotential operator 
    4042   INTEGER, PARAMETER, PUBLIC ::   np_lap_it = 12   ,   np_blp_it = 22  ! triad    iso-neutral or geopotential operator 
     43 
     44   LOGICAL  ::   l_ptr   ! flag to compute poleward transport 
     45   LOGICAL  ::   l_hst   ! flag to compute heat transport 
    4146 
    4247   !! * Substitutions 
     
    95100      CALL wrk_alloc( jpi,jpj,jpk,   ztu, ztv, zaheeu, zaheev )  
    96101      ! 
     102      l_hst = .FALSE. 
     103      l_ptr = .FALSE. 
     104      IF( cdtype == 'TRA' .AND. ln_diaptr )                                                l_ptr = .TRUE.  
     105      IF( cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 
     106         &                        iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) )  l_hst = .TRUE. 
     107      ! 
    97108      !                                !==  Initialization of metric arrays used for all tracers  ==! 
    98109      IF( kpass == 1 ) THEN   ;   zsign =  1._wp      ! bilaplacian operator require a minus sign (eddy diffusivity >0) 
     
    150161         IF( ( kpass == 1 .AND. .NOT.ln_traldf_blp ) .OR.  &     !==  first pass only (  laplacian)  ==! 
    151162             ( kpass == 2 .AND.      ln_traldf_blp ) ) THEN      !==  2nd   pass only (bilaplacian)  ==! 
    152             IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN 
    153                IF( jn  == jp_tem)   htr_ldf(:) = ptr_sj( -ztv(:,:,:) ) 
    154                IF( jn  == jp_sal)   str_ldf(:) = ptr_sj( -ztv(:,:,:) ) 
    155             ENDIF 
     163 
     164            IF( l_ptr )  CALL dia_ptr_hst( jn, 'ldf', -ztv(:,:,:)  ) 
     165            IF( l_hst )  CALL dia_ar5_hst( jn, 'ldf', -ztu(:,:,:), -ztv(:,:,:) ) 
    156166         ENDIF 
    157167         !                          ! ================== 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/TRA/traldf_triad.F90

    r6140 r7403  
    2020   USE traldf_iso     ! lateral diffusion (Madec operator)         (tra_ldf_iso routine) 
    2121   USE diaptr         ! poleward transport diagnostics 
     22   USE diaar5         ! AR5 diagnostics 
    2223   USE zpshde         ! partial step: hor. derivative     (zps_hde routine) 
    2324   ! 
     
    3536 
    3637   REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, SAVE ::   zdkt3d   !: vertical tracer gradient at 2 levels 
     38 
     39   LOGICAL  ::   l_ptr   ! flag to compute poleward transport 
     40   LOGICAL  ::   l_hst   ! flag to compute heat transport 
     41 
    3742 
    3843   !! * Substitutions 
     
    8994      REAL(wp) ::   ze1ur, ze2vr, ze3wr, zdxt, zdyt, zdzt 
    9095      REAL(wp) ::   zah, zah_slp, zaei_slp 
    91 #if defined key_diaar5 
    92       REAL(wp) ::   zztmp              ! local scalar 
    93 #endif 
    9496      REAL(wp), POINTER, DIMENSION(:,:  ) :: z2d                                            ! 2D workspace 
    9597      REAL(wp), POINTER, DIMENSION(:,:,:) :: zdit, zdjt, zftu, zftv, ztfw, zpsi_uw, zpsi_vw   ! 3D     - 
     
    112114         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~' 
    113115      ENDIF 
    114       !                                               ! set time step size (Euler/Leapfrog) 
     116      !    
     117      l_hst = .FALSE. 
     118      l_ptr = .FALSE. 
     119      IF( cdtype == 'TRA' .AND. ln_diaptr )                                                 l_ptr = .TRUE.  
     120      IF( cdtype == 'TRA' .AND. ( iom_use("uadv_heattr") .OR. iom_use("vadv_heattr") .OR. & 
     121         &                        iom_use("uadv_salttr") .OR. iom_use("vadv_salttr")  ) )   l_hst = .TRUE. 
     122      ! 
     123      !                                                        ! set time step size (Euler/Leapfrog) 
    115124      IF( neuler == 0 .AND. kt == kit000 ) THEN   ;   z2dt =     rdt      ! at nit000   (Euler) 
    116125      ELSE                                        ;   z2dt = 2.* rdt      !             (Leapfrog) 
     
    416425            ! 
    417426            !                          ! "Poleward" diffusive heat or salt transports (T-S case only) 
    418             IF( cdtype == 'TRA' .AND. ln_diaptr ) THEN 
    419                IF( jn == jp_tem)   htr_ldf(:) = ptr_sj( zftv(:,:,:) )        ! 3.3  names 
    420                IF( jn == jp_sal)   str_ldf(:) = ptr_sj( zftv(:,:,:) ) 
    421             ENDIF 
    422             ! 
    423             IF( iom_use("udiff_heattr") .OR. iom_use("vdiff_heattr") ) THEN 
    424               ! 
    425               IF( cdtype == 'TRA' .AND. jn == jp_tem  ) THEN 
    426                   z2d(:,:) = zftu(ji,jj,1)  
    427                   DO jk = 2, jpkm1 
    428                      DO jj = 2, jpjm1 
    429                         DO ji = fs_2, fs_jpim1   ! vector opt. 
    430                            z2d(ji,jj) = z2d(ji,jj) + zftu(ji,jj,jk)  
    431                         END DO 
    432                      END DO 
    433                   END DO 
    434                   z2d(:,:) = rau0_rcp * z2d(:,:)  
    435                   CALL lbc_lnk( z2d, 'U', -1. ) 
    436                   CALL iom_put( "udiff_heattr", z2d )                  ! heat i-transport 
    437                   ! 
    438                   z2d(:,:) = zftv(ji,jj,1)  
    439                   DO jk = 2, jpkm1 
    440                      DO jj = 2, jpjm1 
    441                         DO ji = fs_2, fs_jpim1   ! vector opt. 
    442                            z2d(ji,jj) = z2d(ji,jj) + zftv(ji,jj,jk)  
    443                         END DO 
    444                      END DO 
    445                   END DO 
    446                   z2d(:,:) = rau0_rcp * z2d(:,:)      
    447                   CALL lbc_lnk( z2d, 'V', -1. ) 
    448                   CALL iom_put( "vdiff_heattr", z2d )                  !  heat j-transport 
    449                ENDIF 
    450                ! 
    451             ENDIF 
     427            IF( l_ptr )  CALL dia_ptr_hst( jn, 'ldf', zftv(:,:,:)  ) 
     428            !                          ! Diffusive heat transports 
     429            IF( l_hst )  CALL dia_ar5_hst( jn, 'ldf', zftu(:,:,:), zftv(:,:,:) ) 
    452430            ! 
    453431         ENDIF                                                    !== end pass selection  ==! 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/TRD/trd_oce.F90

    r6140 r7403  
    3333# endif 
    3434   !                                                  !!!* Active tracers trends indexes 
    35    INTEGER, PUBLIC, PARAMETER ::   jptot_tra  = 14     !: Total trend nb: change it when adding/removing one indice below 
     35   INTEGER, PUBLIC, PARAMETER ::   jptot_tra  = 20     !: Total trend nb: change it when adding/removing one indice below 
    3636   !                               ===============     !   
    3737   INTEGER, PUBLIC, PARAMETER ::   jptra_xad  =  1     !: x- horizontal advection 
     
    3939   INTEGER, PUBLIC, PARAMETER ::   jptra_zad  =  3     !: z- vertical   advection 
    4040   INTEGER, PUBLIC, PARAMETER ::   jptra_sad  =  4     !: z- vertical   advection 
    41    INTEGER, PUBLIC, PARAMETER ::   jptra_ldf  =  5     !: lateral       diffusion 
    42    INTEGER, PUBLIC, PARAMETER ::   jptra_zdf  =  6     !: vertical      diffusion 
    43    INTEGER, PUBLIC, PARAMETER ::   jptra_zdfp =  7     !: "PURE" vert.  diffusion (ln_traldf_iso=T) 
    44    INTEGER, PUBLIC, PARAMETER ::   jptra_bbc  =  8     !: Bottom Boundary Condition (geoth. heating)  
    45    INTEGER, PUBLIC, PARAMETER ::   jptra_bbl  =  9     !: Bottom Boundary Layer (diffusive and/or advective) 
    46    INTEGER, PUBLIC, PARAMETER ::   jptra_npc  = 10     !: non-penetrative convection treatment 
    47    INTEGER, PUBLIC, PARAMETER ::   jptra_dmp  = 11     !: internal restoring (damping) 
    48    INTEGER, PUBLIC, PARAMETER ::   jptra_qsr  = 12     !: penetrative solar radiation 
    49    INTEGER, PUBLIC, PARAMETER ::   jptra_nsr  = 13     !: non solar radiation / C/D on salinity  (+runoff if ln_rnf=T) 
    50    INTEGER, PUBLIC, PARAMETER ::   jptra_atf  = 14     !: Asselin time filter 
     41   INTEGER, PUBLIC, PARAMETER ::   jptra_totad  =  5   !: total         advection 
     42   INTEGER, PUBLIC, PARAMETER ::   jptra_ldf  =  6     !: lateral       diffusion 
     43   INTEGER, PUBLIC, PARAMETER ::   jptra_zdf  =  7     !: vertical      diffusion 
     44   INTEGER, PUBLIC, PARAMETER ::   jptra_zdfp =  8     !: "PURE" vert.  diffusion (ln_traldf_iso=T) 
     45   INTEGER, PUBLIC, PARAMETER ::   jptra_evd  =  9     !: EVD term (convection) 
     46   INTEGER, PUBLIC, PARAMETER ::   jptra_bbc  = 10     !: Bottom Boundary Condition (geoth. heating)  
     47   INTEGER, PUBLIC, PARAMETER ::   jptra_bbl  = 11     !: Bottom Boundary Layer (diffusive and/or advective) 
     48   INTEGER, PUBLIC, PARAMETER ::   jptra_npc  = 12     !: non-penetrative convection treatment 
     49   INTEGER, PUBLIC, PARAMETER ::   jptra_dmp  = 13     !: internal restoring (damping) 
     50   INTEGER, PUBLIC, PARAMETER ::   jptra_qsr  = 14     !: penetrative solar radiation 
     51   INTEGER, PUBLIC, PARAMETER ::   jptra_nsr  = 15     !: non solar radiation / C/D on salinity  (+runoff if ln_rnf=T) 
     52   INTEGER, PUBLIC, PARAMETER ::   jptra_atf  = 16     !: Asselin time filter 
     53   INTEGER, PUBLIC, PARAMETER ::   jptra_tot  = 17     !: Model total trend 
    5154   ! 
    5255   !                                                  !!!* Passive tracers trends indices (use if "key_top" defined) 
    53    INTEGER, PUBLIC, PARAMETER ::   jptra_sms  = 15     !: sources m. sinks 
    54    INTEGER, PUBLIC, PARAMETER ::   jptra_radn = 16     !: corr. trn<0 in trcrad 
    55    INTEGER, PUBLIC, PARAMETER ::   jptra_radb = 17     !: corr. trb<0 in trcrad (like atf) 
     56   INTEGER, PUBLIC, PARAMETER ::   jptra_sms  = 18     !: sources m. sinks 
     57   INTEGER, PUBLIC, PARAMETER ::   jptra_radn = 19     !: corr. trn<0 in trcrad 
     58   INTEGER, PUBLIC, PARAMETER ::   jptra_radb = 20     !: corr. trb<0 in trcrad (like atf) 
    5659   ! 
    5760   !                                                  !!!* Momentum trends indices 
    58    INTEGER, PUBLIC, PARAMETER ::   jptot_dyn  = 15     !: Total trend nb: change it when adding/removing one indice below 
     61   INTEGER, PUBLIC, PARAMETER ::   jptot_dyn  = 13     !: Total trend nb: change it when adding/removing one indice below 
    5962   !                               ===============     !   
    6063   INTEGER, PUBLIC, PARAMETER ::   jpdyn_hpg  =  1     !: hydrostatic pressure gradient  
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/TRD/trdini.F90

    r6140 r7403  
    9090!!gm end 
    9191      ! 
    92       IF( .NOT.ln_linssh .AND. ( l_trdtra .OR. l_trddyn ) )  CALL ctl_stop( 'trend diagnostics with variable volume not validated' ) 
     92!      IF( .NOT.ln_linssh .AND. ( l_trdtra .OR. l_trddyn ) )  CALL ctl_stop( 'trend diagnostics with variable volume not validated' ) 
    9393       
    9494!!gm  : Potential BUG : 3D output only for vector invariant form!  add a ctl_stop or code the flux form case 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/TRD/trdken.F90

    r6140 r7403  
    2828   USE lib_mpp        ! MPP library 
    2929   USE wrk_nemo       ! Memory allocation 
     30   USE ldfslp         ! Isopycnal slopes 
    3031 
    3132   IMPLICIT NONE 
     
    180181!                              CALL iom_put( "ketrd_bfri", zke2d ) 
    181182!         ENDIF 
    182          CASE( jpdyn_ken )   ;                                          ! kinetic energy 
    183                                  ! called in dynnxt.F90 before asselin time filter with putrd=ua and pvtrd=va 
    184                                  zke(:,:,:) = 0.5_wp * zke(:,:,:) 
    185                                  CALL iom_put( "KE", zke ) 
    186                                  ! 
    187                                  CALL ken_p2k( kt , zke ) 
    188                                  CALL iom_put( "ketrd_convP2K", zke )     ! conversion -rau*g*w 
     183        CASE( jpdyn_ken )   ;   ! kinetic energy 
     184                    ! called in dynnxt.F90 before asselin time filter 
     185                    ! with putrd=ua and pvtrd=va 
     186                    zke(:,:,:) = 0.5_wp * zke(:,:,:) 
     187                    CALL iom_put( "KE", zke ) 
     188                    ! 
     189                    CALL ken_p2k( kt , zke ) 
     190                      CALL iom_put( "ketrd_convP2K", zke )     ! conversion -rau*g*w 
    189191         ! 
    190192      END SELECT 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/TRD/trdtra.F90

    r6140 r7403  
    3939 
    4040   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   trdtx, trdty, trdt   ! use to store the temperature trends 
     41   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   avt_evd  ! store avt_evd to calculate EVD trend 
    4142 
    4243   !! * Substitutions 
     
    5455      !!                  ***  FUNCTION trd_tra_alloc  *** 
    5556      !!--------------------------------------------------------------------- 
    56       ALLOCATE( trdtx(jpi,jpj,jpk) , trdty(jpi,jpj,jpk) , trdt(jpi,jpj,jpk) , STAT= trd_tra_alloc ) 
     57      ALLOCATE( trdtx(jpi,jpj,jpk) , trdty(jpi,jpj,jpk) , trdt(jpi,jpj,jpk) , avt_evd(jpi,jpj,jpk), STAT= trd_tra_alloc ) 
    5758      ! 
    5859      IF( lk_mpp             )   CALL mpp_sum ( trd_tra_alloc ) 
     
    127128            zwt(:,:,jpk) = 0._wp   ;   zws(:,:,jpk) = 0._wp 
    128129            DO jk = 2, jpk 
    129                zwt(:,:,jk) =   avt(:,:,jk) * ( tsa(:,:,jk-1,jp_tem) - tsa(:,:,jk,jp_tem) ) / e3w_n(:,:,jk) * tmask(:,:,jk) 
     130               zwt(:,:,jk) = avt_k(:,:,jk) * ( tsa(:,:,jk-1,jp_tem) - tsa(:,:,jk,jp_tem) ) / e3w_n(:,:,jk) * tmask(:,:,jk) 
    130131               zws(:,:,jk) = fsavs(:,:,jk) * ( tsa(:,:,jk-1,jp_sal) - tsa(:,:,jk,jp_sal) ) / e3w_n(:,:,jk) * tmask(:,:,jk) 
    131132            END DO 
     
    137138            END DO 
    138139            CALL trd_tra_mng( ztrdt, ztrds, jptra_zdfp, kt )   
     140            ! 
     141            !                         ! Also calculate EVD trend at this point.  
     142            zwt(:,:,:) = 0._wp   ;   zws(:,:,:) = 0._wp            ! vertical diffusive fluxes 
     143            DO jk = 2, jpk 
     144               zwt(:,:,jk) = avt_evd(:,:,jk) * ( tsa(:,:,jk-1,jp_tem) - tsa(:,:,jk,jp_tem) ) / e3w_n(:,:,jk) * tmask(:,:,jk) 
     145               zws(:,:,jk) = avt_evd(:,:,jk) * ( tsa(:,:,jk-1,jp_sal) - tsa(:,:,jk,jp_sal) ) / e3w_n(:,:,jk) * tmask(:,:,jk) 
     146            END DO 
     147            ! 
     148            ztrdt(:,:,jpk) = 0._wp   ;   ztrds(:,:,jpk) = 0._wp 
     149            DO jk = 1, jpkm1 
     150               ztrdt(:,:,jk) = ( zwt(:,:,jk) - zwt(:,:,jk+1) ) / e3t_n(:,:,jk) 
     151               ztrds(:,:,jk) = ( zws(:,:,jk) - zws(:,:,jk+1) ) / e3t_n(:,:,jk)  
     152            END DO 
     153            CALL trd_tra_mng( ztrdt, ztrds, jptra_evd, kt )   
    139154            ! 
    140155            CALL wrk_dealloc( jpi, jpj, jpk, zwt, zws, ztrdt ) 
     
    311326                                  CALL wrk_dealloc( jpi, jpj, z2dx, z2dy ) 
    312327                               ENDIF 
     328      CASE( jptra_totad  ) ;   CALL iom_put( "ttrd_totad" , ptrdx )      ! total   advection 
     329                               CALL iom_put( "strd_totad" , ptrdy ) 
    313330      CASE( jptra_ldf  )   ;   CALL iom_put( "ttrd_ldf" , ptrdx )        ! lateral diffusion 
    314331                               CALL iom_put( "strd_ldf" , ptrdy ) 
     
    317334      CASE( jptra_zdfp )   ;   CALL iom_put( "ttrd_zdfp", ptrdx )        ! PURE vertical diffusion (no isoneutral contribution) 
    318335                               CALL iom_put( "strd_zdfp", ptrdy ) 
     336      CASE( jptra_evd )    ;   CALL iom_put( "ttrd_evd", ptrdx )         ! EVD trend (convection) 
     337                               CALL iom_put( "strd_evd", ptrdy ) 
    319338      CASE( jptra_dmp  )   ;   CALL iom_put( "ttrd_dmp" , ptrdx )        ! internal restoring (damping) 
    320339                               CALL iom_put( "strd_dmp" , ptrdy ) 
     
    323342      CASE( jptra_npc  )   ;   CALL iom_put( "ttrd_npc" , ptrdx )        ! static instability mixing 
    324343                               CALL iom_put( "strd_npc" , ptrdy ) 
    325       CASE( jptra_nsr  )   ;   CALL iom_put( "ttrd_qns" , ptrdx )        ! surface forcing + runoff (ln_rnf=T) 
    326                                CALL iom_put( "strd_cdt" , ptrdy ) 
     344      CASE( jptra_nsr  )   ;   CALL iom_put( "ttrd_qns" , ptrdx(:,:,1) )        ! surface forcing + runoff (ln_rnf=T) 
     345                               CALL iom_put( "strd_cdt" , ptrdy(:,:,1) )        ! output as 2D surface fields 
    327346      CASE( jptra_qsr  )   ;   CALL iom_put( "ttrd_qsr" , ptrdx )        ! penetrative solar radiat. (only on temperature) 
    328347      CASE( jptra_bbc  )   ;   CALL iom_put( "ttrd_bbc" , ptrdx )        ! geothermal heating   (only on temperature) 
    329348      CASE( jptra_atf  )   ;   CALL iom_put( "ttrd_atf" , ptrdx )        ! asselin time Filter 
    330349                               CALL iom_put( "strd_atf" , ptrdy ) 
     350      CASE( jptra_tot  )   ;   CALL iom_put( "ttrd_tot" , ptrdx )        ! model total trend 
     351                               CALL iom_put( "strd_tot" , ptrdy ) 
    331352      END SELECT 
    332353      ! 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/ZDF/zdf_oce.F90

    r5836 r7403  
    3535   INTEGER , PUBLIC ::   nn_npc      !: non penetrative convective scheme call  frequency 
    3636   INTEGER , PUBLIC ::   nn_npcp     !: non penetrative convective scheme print frequency 
     37   LOGICAL , PUBLIC ::   ln_zdfqiao  !: Enhanced wave vertical mixing Qiao(2010) formulation flag 
    3738 
    3839 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfevd.F90

    r6140 r7403  
    1717   USE dom_oce         ! ocean space and time domain variables 
    1818   USE zdf_oce         ! ocean vertical physics variables 
     19   USE trd_oce         ! trends: ocean variables 
     20   USE trdtra          ! trends manager: tracers  
    1921   ! 
    2022   USE in_out_manager  ! I/O manager 
     
    111113      zavt_evd(:,:,:) = avt(:,:,:) - zavt_evd(:,:,:)   ! change in avt due to evd 
    112114      CALL iom_put( "avt_evd", zavt_evd )              ! output this change 
     115      IF( l_trdtra ) CALL trd_tra( kt, 'TRA', jp_tem, jptra_evd, zavt_evd ) 
    113116      ! 
    114117      CALL wrk_dealloc( jpi,jpj,jpk,   zavt_evd, zavm_evd )  
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfini.F90

    r5836 r7403  
    5151      INTEGER ::   ioptio, ios       ! local integers 
    5252      !! 
    53       NAMELIST/namzdf/ rn_avm0, rn_avt0, nn_avb, nn_havtb, ln_zdfexp, nn_zdfexp,   & 
    54          &              ln_zdfevd, nn_evdm, rn_avevd, ln_zdfnpc, nn_npc, nn_npcp 
     53      NAMELIST/namzdf/ rn_avm0, rn_avt0, nn_avb, nn_havtb, ln_zdfexp, nn_zdfexp,  & 
     54         &        ln_zdfevd, nn_evdm, rn_avevd, ln_zdfnpc, nn_npc, nn_npcp,       & 
     55         &        ln_zdfqiao 
    5556      !!---------------------------------------------------------------------- 
    5657 
     
    8182         WRITE(numout,*) '      npc call  frequency                 nn_npc    = ', nn_npc 
    8283         WRITE(numout,*) '      npc print frequency                 nn_npcp   = ', nn_npcp 
     84         WRITE(numout,*) '      Qiao formulation flag               ln_zdfqiao=', ln_zdfqiao 
    8385      ENDIF 
    8486 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfric.F90

    r7048 r7403  
    205205         DO jj = 2, jpjm1 
    206206            DO ji = fs_2, fs_jpim1 
    207                IF( fsdept(ji,jj,jk) < ekm_dep(ji,jj) ) THEN 
     207               IF( gdepw_n(ji,jj,jk) < ekm_dep(ji,jj) ) THEN 
    208208                  avmv(ji,jj,jk) = MAX( avmv(ji,jj,jk), rn_wvmix ) 
    209209                  avmu(ji,jj,jk) = MAX( avmu(ji,jj,jk), rn_wvmix ) 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90

    r6152 r7403  
    490490      IF( lk_floats     )   CALL     flo_init   ! drifting Floats 
    491491                            CALL dia_cfl_init   ! Initialise CFL diagnostics 
    492       IF( lk_diaar5     )   CALL dia_ar5_init   ! ar5 diag 
    493492                            CALL dia_ptr_init   ! Poleward TRansports initialization 
    494493      IF( lk_diadct     )   CALL dia_dct_init   ! Sections tranports 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/step.F90

    r6464 r7403  
    2626   !!            3.6  !  2012-07  (J. Simeon, G. Madec. C. Ethe)  Online coarsening of outputs 
    2727   !!            3.6  !  2014-04  (F. Roquet, G. Madec) New equations of state 
     28   !!            3.6  !  2014-10  (E. Clementi, P. Oddo) Add Qiao vertical mixing in case of waves 
    2829   !!            3.7  !  2014-10  (G. Madec)  LDF simplication  
    2930   !!             -   !  2014-12  (G. Madec) remove KPP scheme 
     
    7374      !!              -8- Outputs and diagnostics 
    7475      !!---------------------------------------------------------------------- 
    75       INTEGER ::   jk      ! dummy loop indice 
     76      INTEGER ::   ji,jj,jk ! dummy loop indice 
    7677      INTEGER ::   indic    ! error indicator if < 0 
    7778      INTEGER ::   kcall    ! optional integer argument (dom_vvl_sf_nxt) 
     
    128129                         CALL zdf_bfr( kstp )         ! bottom friction (if quadratic) 
    129130      !                                               ! Vertical eddy viscosity and diffusivity coefficients 
    130       IF( lk_zdfric  )   CALL zdf_ric( kstp )            ! Richardson number dependent Kz 
    131       IF( lk_zdftke  )   CALL zdf_tke( kstp )            ! TKE closure scheme for Kz 
    132       IF( lk_zdfgls  )   CALL zdf_gls( kstp )            ! GLS closure scheme for Kz 
    133       IF( lk_zdfcst  ) THEN                              ! Constant Kz (reset avt, avm[uv] to the background value) 
     131      IF( lk_zdfric  )   CALL zdf_ric ( kstp )             ! Richardson number dependent Kz 
     132      IF( lk_zdftke  )   CALL zdf_tke ( kstp )             ! TKE closure scheme for Kz 
     133      IF( lk_zdfgls  )   CALL zdf_gls ( kstp )             ! GLS closure scheme for Kz 
     134      IF( ln_zdfqiao )   CALL zdf_qiao( kstp )             ! Qiao vertical mixing  
     135      ! 
     136      IF( lk_zdfcst  ) THEN                                ! Constant Kz (reset avt, avm[uv] to the background value) 
    134137         avt (:,:,:) = rn_avt0 * wmask (:,:,:) 
    135138         avmu(:,:,:) = rn_avm0 * wumask(:,:,:) 
     
    207210                         CALL dyn_adv       ( kstp )  ! advection (vector or flux form) 
    208211                         CALL dyn_vor       ( kstp )  ! vorticity term including Coriolis 
     212      IF( ln_wave .AND. ln_sdw .AND. ln_stcor)           & 
     213               &         CALL dyn_stcor     ( kstp )  ! Stokes-Coriolis forcing 
    209214                         CALL dyn_ldf       ( kstp )  ! lateral mixing 
    210215                         CALL dyn_hpg       ( kstp )  ! horizontal gradient of Hydrostatic pressure 
     
    234239      IF(.NOT.ln_cpl )   CALL dia_fwb( kstp )         ! Fresh water budget diagnostics 
    235240      IF( lk_diadct  )   CALL dia_dct( kstp )         ! Transports 
    236       IF( lk_diaar5  )   CALL dia_ar5( kstp )         ! ar5 diag 
     241                         CALL dia_ar5( kstp )         ! ar5 diag 
    237242      IF( lk_diaharm )   CALL dia_harm( kstp )        ! Tidal harmonic analysis 
    238243                         CALL dia_wri( kstp )         ! ocean model: outputs 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/step_oce.F90

    r6140 r7403  
    1919   USE sbcapr           ! surface boundary condition: atmospheric pressure 
    2020   USE sbctide          ! Tide initialisation 
     21   USE sbcwave          ! Wave intialisation 
    2122 
    2223   USE traqsr           ! solar radiation penetration      (tra_qsr routine) 
     
    4142   USE dynzdf           ! vertical diffusion               (dyn_zdf routine) 
    4243   USE dynspg           ! surface pressure gradient        (dyn_spg routine) 
     44   USE dynstcor         ! simp. form of Stokes-Coriolis 
    4345 
    4446   USE dynnxt           ! time-stepping                    (dyn_nxt routine) 
     
    7173   USE zdfric           ! Richardson vertical mixing       (zdf_ric routine) 
    7274   USE zdfmxl           ! Mixed-layer depth                (zdf_mxl routine) 
     75   USE zdfqiao          !Qiao module wave induced mixing   (zdf_qiao routine) 
    7376 
    7477   USE step_diu        ! Time stepping for diurnal sst 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/OPA_SRC/trc_oce.F90

    r6140 r7403  
    2424   PUBLIC   trc_oce_alloc      ! function called by nemogcm.F90 
    2525 
     26   LOGICAL , PUBLIC                                      ::   l_co2cpl = .false.   !: atmospheric pco2 recieved from oasis 
    2627   INTEGER , PUBLIC                                      ::   nn_dttrc      !: frequency of step on passive tracers 
    2728   REAL(wp), PUBLIC                                      ::   r_si2         !: largest depth of extinction (blue & 0.01 mg.m-3)  (RGB) 
    2829   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   etot3         !: light absortion coefficient 
    29    REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:,:) ::   facvol        !: volume for degraded regions 
     30   REAL(wp), PUBLIC, SAVE, ALLOCATABLE, DIMENSION(:,:)   ::   oce_co2   !: ocean carbon flux 
    3031 
    3132#if defined key_top  
     
    7576      !!                  ***  trc_oce_alloc  *** 
    7677      !!---------------------------------------------------------------------- 
    77       INTEGER ::   ierr(2)        ! Local variables 
    78       !!---------------------------------------------------------------------- 
    79       ierr(:) = 0 
    80                      ALLOCATE( etot3 (jpi,jpj,jpk), STAT=ierr(1) ) 
    81       IF( lk_degrad) ALLOCATE( facvol(jpi,jpj,jpk), STAT=ierr(2) ) 
    82       trc_oce_alloc  = MAXVAL( ierr ) 
    83       ! 
     78      ALLOCATE( etot3(jpi,jpj,jpk), oce_co2(jpi,jpj), STAT=trc_oce_alloc ) 
    8479      IF( trc_oce_alloc /= 0 )   CALL ctl_warn('trc_oce_alloc: failed to allocate etot3 array') 
     80      ! 
    8581   END FUNCTION trc_oce_alloc 
    8682 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/SAS_SRC/diawri.F90

    r6140 r7403  
    3636   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    3737   USE in_out_manager  ! I/O manager 
    38    USE diaar5, ONLY :   lk_diaar5 
    3938   USE iom 
    4039   USE ioipsl 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/CFC/par_cfc.F90

    r3680 r7403  
    1010   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    1111   !!---------------------------------------------------------------------- 
    12    USE par_pisces , ONLY : jp_pisces       !: number of tracers in PISCES 
    13    USE par_pisces , ONLY : jp_pisces_2d    !: number of 2D diag in PISCES 
    14    USE par_pisces , ONLY : jp_pisces_3d    !: number of 3D diag in PISCES 
    15    USE par_pisces , ONLY : jp_pisces_trd   !: number of biological diag in PISCES 
    1612 
    1713   IMPLICIT NONE 
    18  
    19    INTEGER, PARAMETER ::   jp_lc      =  jp_pisces     !: cumulative number of passive tracers 
    20    INTEGER, PARAMETER ::   jp_lc_2d   =  jp_pisces_2d  !: 
    21    INTEGER, PARAMETER ::   jp_lc_3d   =  jp_pisces_3d  !: 
    22    INTEGER, PARAMETER ::   jp_lc_trd  =  jp_pisces_trd !: 
    23     
    24 #if defined key_cfc 
    25    !!--------------------------------------------------------------------- 
    26    !!   'key_cfc'   :                                          CFC tracers 
    27    !!--------------------------------------------------------------------- 
    28    LOGICAL, PUBLIC, PARAMETER ::   lk_cfc     = .TRUE.      !: CFC flag  
    29    INTEGER, PUBLIC, PARAMETER ::   jp_cfc     =  1          !: number of passive tracers 
    30    INTEGER, PUBLIC, PARAMETER ::   jp_cfc_2d  =  2          !: additional 2d output arrays ('key_trc_diaadd') 
    31    INTEGER, PUBLIC, PARAMETER ::   jp_cfc_3d  =  0          !: additional 3d output arrays ('key_trc_diaadd') 
    32    INTEGER, PUBLIC, PARAMETER ::   jp_cfc_trd =  0          !: number of sms trends for CFC 
    33     
    34    ! assign an index in trc arrays for each CFC prognostic variables 
    35    INTEGER, PUBLIC, PARAMETER ::   jpc11       = jp_lc + 1   !: CFC-11  
    36    INTEGER, PUBLIC, PARAMETER ::   jpc12       = jp_lc + 2   !: CFC-12    
    37 #else 
    38    !!--------------------------------------------------------------------- 
    39    !!   Default     :                                       No CFC tracers 
    40    !!--------------------------------------------------------------------- 
    41    LOGICAL, PUBLIC, PARAMETER ::   lk_cfc     = .FALSE.     !: CFC flag  
    42    INTEGER, PUBLIC, PARAMETER ::   jp_cfc     =  0          !: No CFC tracers 
    43    INTEGER, PUBLIC, PARAMETER ::   jp_cfc_2d  =  0          !: No CFC additional 2d output arrays  
    44    INTEGER, PUBLIC, PARAMETER ::   jp_cfc_3d  =  0          !: No CFC additional 3d output arrays  
    45    INTEGER, PUBLIC, PARAMETER ::   jp_cfc_trd =  0          !: number of sms trends for CFC 
    46 #endif 
    47  
    48    ! Starting/ending CFC do-loop indices (N.B. no CFC : jp_cfc0 > jp_cfc1 the do-loop are never done) 
    49    INTEGER, PUBLIC, PARAMETER ::   jp_cfc0     = jp_lc + 1       !: First index of CFC tracers 
    50    INTEGER, PUBLIC, PARAMETER ::   jp_cfc1     = jp_lc + jp_cfc  !: Last  index of CFC tracers 
    51    INTEGER, PUBLIC, PARAMETER ::   jp_cfc0_2d  = jp_lc_2d  + 1       !: First index of CFC tracers 
    52    INTEGER, PUBLIC, PARAMETER ::   jp_cfc1_2d  = jp_lc_2d  + jp_cfc_2d  !: Last  index of CFC tracers 
    53    INTEGER, PUBLIC, PARAMETER ::   jp_cfc0_3d  = jp_lc_3d  + 1       !: First index of CFC tracers 
    54    INTEGER, PUBLIC, PARAMETER ::   jp_cfc1_3d  = jp_lc_3d  + jp_cfc_3d  !: Last  index of CFC tracers 
    55    INTEGER, PUBLIC, PARAMETER ::   jp_cfc0_trd = jp_lc_trd + 1       !: First index of CFC tracers 
    56    INTEGER, PUBLIC, PARAMETER ::   jp_cfc1_trd = jp_lc_trd + jp_cfc_trd  !: Last  index of CFC tracers 
     14   INTEGER, PUBLIC  :: jp_cfc0, jp_cfc1  !:  First/last index of CFC tracers 
    5715 
    5816   !!====================================================================== 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/CFC/trcice_cfc.F90

    r5434 r7403  
    55   !!====================================================================== 
    66   !! History :   2.0  !  2007-12  (C. Ethe, G. Madec) Original code 
    7    !!---------------------------------------------------------------------- 
    8 #if defined key_cfc 
    9    !!---------------------------------------------------------------------- 
    10    !!   'key_cfc'                                               CFC tracers 
    117   !!---------------------------------------------------------------------- 
    128   !! trc_ice_cfc       : MY_TRC model main routine 
     
    4036   END SUBROUTINE trc_ice_ini_cfc 
    4137 
    42  
    43 #else 
    44    !!---------------------------------------------------------------------- 
    45    !!   Dummy module                                        No MY_TRC model 
    46    !!---------------------------------------------------------------------- 
    47 CONTAINS 
    48    SUBROUTINE trc_ice_ini_cfc             ! Empty routine 
    49    END SUBROUTINE trc_ice_ini_cfc 
    50 #endif 
    51  
    5238   !!====================================================================== 
    5339END MODULE trcice_cfc 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/CFC/trcini_cfc.F90

    r3294 r7403  
    66   !! History :   2.0  !  2007-12  (C. Ethe, G. Madec)  
    77   !!---------------------------------------------------------------------- 
    8 #if defined key_cfc 
    9    !!---------------------------------------------------------------------- 
    10    !!   'key_cfc'                                               CFC tracers 
    118   !!---------------------------------------------------------------------- 
    129   !! trc_ini_cfc      : CFC model initialisation 
     
    1512   USE par_trc         ! TOP parameters 
    1613   USE trc             ! TOP variables 
     14   USE trcnam_cfc      ! CFC SMS namelist 
    1715   USE trcsms_cfc      ! CFC sms trends 
    1816 
     
    2119 
    2220   PUBLIC   trc_ini_cfc   ! called by trcini.F90 module 
    23  
    24    CHARACTER (len=34) ::   clname = 'cfc1112.atm'   ! ??? 
    2521 
    2622   INTEGER  ::   inum                   ! unit number 
     
    4642      INTEGER  ::  iskip = 6   ! number of 1st descriptor lines 
    4743      REAL(wp) ::  zyy, zyd 
     44      CHARACTER(len = 20)  ::  cltra 
    4845      !!---------------------------------------------------------------------- 
    49  
     46      ! 
     47      CALL trc_nam_cfc 
     48      ! 
    5049      IF(lwp) WRITE(numout,*) 
    5150      IF(lwp) WRITE(numout,*) ' trc_ini_cfc: initialisation of CFC chemical model' 
    5251      IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~' 
    53  
    54  
    55       IF(lwp) WRITE(numout,*) 'read of formatted file cfc1112atm' 
     52      ! 
     53      IF(lwp) WRITE(numout,*) 'Read annual atmospheric concentratioins from formatted file : ' // TRIM(clname) 
    5654       
    5755      CALL ctl_opn( inum, clname, 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 
     
    6664      END DO 
    6765 100  jpyear = jn - 1 - iskip 
    68       IF ( lwp) WRITE(numout,*) '    ', jpyear ,' years read' 
     66      IF ( lwp) WRITE(numout,*) '   ---> ', jpyear ,' years read' 
    6967      !                                ! Allocate CFC arrays 
    7068 
    71       ALLOCATE( p_cfc(jpyear,jphem,2), STAT=ierr ) 
     69      ALLOCATE( p_cfc(jpyear,jphem,3), STAT=ierr ) 
    7270      IF( ierr > 0 ) THEN 
    7371         CALL ctl_stop( 'trc_ini_cfc: unable to allocate p_cfc array' )   ;   RETURN 
     
    8785         IF(lwp) THEN 
    8886            WRITE(numout,*) 
    89             WRITE(numout,*) 'Initialization de qint ; No restart : qint equal zero ' 
     87            WRITE(numout,*) 'Initialisation of qint ; No restart : qint equal zero ' 
    9088         ENDIF 
    9189         qint_cfc(:,:,:) = 0._wp 
     
    105103      jn = 31 
    106104      DO  
    107         READ(inum,*, IOSTAT=io) zyy, p_cfc(jn,1,1), p_cfc(jn,1,2), p_cfc(jn,2,1), p_cfc(jn,2,2) 
     105        READ(inum,*, IOSTAT=io) zyy, p_cfc(jn,1:2,1), p_cfc(jn,1:2,2), p_cfc(jn,1:2,3) 
    108106        IF( io < 0 ) exit 
    109107        jn = jn + 1 
    110108      END DO 
    111109 
    112       p_cfc(32,1:2,1) = 5.e-4      ! modify the values of the first years 
    113       p_cfc(33,1:2,1) = 8.e-4 
    114       p_cfc(34,1:2,1) = 1.e-6 
    115       p_cfc(35,1:2,1) = 2.e-3 
    116       p_cfc(36,1:2,1) = 4.e-3 
    117       p_cfc(37,1:2,1) = 6.e-3 
    118       p_cfc(38,1:2,1) = 8.e-3 
    119       p_cfc(39,1:2,1) = 1.e-2 
    120        
     110      !p_cfc(32,1:2,1) = 5.e-4      ! modify the values of the first years 
     111      !p_cfc(33,1:2,1) = 8.e-4 
     112      !p_cfc(34,1:2,1) = 1.e-6 
     113      !p_cfc(35,1:2,1) = 2.e-3 
     114      !p_cfc(36,1:2,1) = 4.e-3 
     115      !p_cfc(37,1:2,1) = 6.e-3 
     116      !p_cfc(38,1:2,1) = 8.e-3 
     117      !p_cfc(39,1:2,1) = 1.e-2 
    121118      IF(lwp) THEN        ! Control print 
    122119         WRITE(numout,*) 
    123          WRITE(numout,*) ' Year   p11HN    p11HS    p12HN    p12HS ' 
     120         WRITE(numout,*) ' Year   c11NH     c11SH     c12NH     c12SH     SF6NH     SF6SH' 
    124121         DO jn = 30, jpyear 
    125             WRITE(numout, '( 1I4, 4F9.2)') jn, p_cfc(jn,1,1), p_cfc(jn,2,1), p_cfc(jn,1,2), p_cfc(jn,2,2) 
     122            WRITE(numout, '( 1I4, 6F10.4)') jn, p_cfc(jn,1:2,1), p_cfc(jn,1:2,2), p_cfc(jn,1:2,3) 
    126123         END DO 
    127124      ENDIF 
     
    145142      ! 
    146143   END SUBROUTINE trc_ini_cfc 
    147     
    148 #else 
    149    !!---------------------------------------------------------------------- 
    150    !!   Dummy module                                         No CFC tracers 
    151    !!---------------------------------------------------------------------- 
    152 CONTAINS 
    153    SUBROUTINE trc_ini_cfc             ! Empty routine 
    154    END SUBROUTINE trc_ini_cfc 
    155 #endif 
    156144 
    157145   !!====================================================================== 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/CFC/trcnam_cfc.F90

    r4624 r7403  
    66   !! History :   2.0  !  2007-12  (C. Ethe, G. Madec) from trcnam.cfc.h90 
    77   !!---------------------------------------------------------------------- 
    8 #if defined key_cfc 
    9    !!---------------------------------------------------------------------- 
    10    !!   'key_cfc'                                               CFC tracers 
    11    !!---------------------------------------------------------------------- 
    128   !! trc_nam_cfc      : CFC model initialisation 
    139   !!---------------------------------------------------------------------- 
    1410   USE oce_trc         ! Ocean variables 
    15    USE par_trc         ! TOP parameters 
    1611   USE trc             ! TOP variables 
    1712   USE trcsms_cfc      ! CFC specific variable 
    18    USE iom             ! I/O manager 
    1913 
    2014   IMPLICIT NONE 
    2115   PRIVATE 
     16 
     17   CHARACTER(len=34), PUBLIC ::   clname ! Input filename of CFCs atm. concentrations 
    2218 
    2319   PUBLIC   trc_nam_cfc   ! called by trcnam.F90 module 
     
    4238      !! ** input   :   Namelist namcfc 
    4339      !!---------------------------------------------------------------------- 
    44       INTEGER ::  numnatc_ref = -1   ! Logical unit for reference CFC namelist 
    45       INTEGER ::  numnatc_cfg = -1   ! Logical unit for configuration CFC namelist 
    46       INTEGER ::  numonc      = -1   ! Logical unit for output namelist 
    4740      INTEGER :: ios                 ! Local integer output status for namelist read 
    4841      INTEGER :: jl, jn 
    49       TYPE(DIAG), DIMENSION(jp_cfc_2d) :: cfcdia2d 
    5042      !! 
    51       NAMELIST/namcfcdate/ ndate_beg, nyear_res 
    52       NAMELIST/namcfcdia/  cfcdia2d     ! additional diagnostics 
     43      NAMELIST/namcfc/ ndate_beg, nyear_res, clname 
    5344      !!---------------------------------------------------------------------- 
    54       !                             ! Open namelist files 
    55       CALL ctl_opn( numnatc_ref, 'namelist_cfc_ref'   ,     'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 
    56       CALL ctl_opn( numnatc_cfg, 'namelist_cfc_cfg'   ,     'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 
    57       IF(lwm) CALL ctl_opn( numonc, 'output.namelist.cfc', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 
     45      ! 
     46      jn = jp_cfc0 - 1 
     47      ! Variables setting 
     48      IF( ln_cfc11 ) THEN 
     49         jn = jn + 1 
     50         ctrcnm    (jn) = 'CFC11' 
     51         ctrcln    (jn) = 'Chlorofluoro carbon 11 Concentration' 
     52         ctrcun    (jn) = 'umolC/L' 
     53         ln_trc_ini(jn) = .false. 
     54         ln_trc_sbc(jn) = .false. 
     55         ln_trc_cbc(jn) = .false. 
     56         ln_trc_obc(jn) = .false. 
     57      ENDIF 
     58      ! 
     59      IF( ln_cfc12 ) THEN 
     60         jn = jn + 1 
     61         ctrcnm    (jn) = 'CFC12' 
     62         ctrcln    (jn) = 'Chlorofluoro carbon 12 Concentration' 
     63         ctrcun    (jn) = 'umolC/L' 
     64         ln_trc_ini(jn) = .false. 
     65         ln_trc_sbc(jn) = .false. 
     66         ln_trc_cbc(jn) = .false. 
     67         ln_trc_obc(jn) = .false. 
     68      ENDIF 
     69      ! 
     70      IF( ln_sf6 ) THEN 
     71         jn = jn + 1 
     72         ctrcnm    (jn) = 'SF6' 
     73         ctrcln    (jn) = 'Sulfur hexafluoride Concentration' 
     74         ctrcun    (jn) = 'umol/L' 
     75         ln_trc_ini(jn) = .false. 
     76         ln_trc_sbc(jn) = .false. 
     77         ln_trc_cbc(jn) = .false. 
     78         ln_trc_obc(jn) = .false. 
     79      ENDIF 
     80      ! 
     81      REWIND( numtrc_ref )              ! Namelist namcfcdate in reference namelist : CFC parameters 
     82      READ  ( numtrc_ref, namcfc, IOSTAT = ios, ERR = 901) 
     83901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namcfc in reference namelist', lwp ) 
    5884 
    59       REWIND( numnatc_ref )              ! Namelist namcfcdate in reference namelist : CFC parameters 
    60       READ  ( numnatc_ref, namcfcdate, IOSTAT = ios, ERR = 901) 
    61 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namcfcdate in reference namelist', lwp ) 
    62  
    63       REWIND( numnatc_cfg )              ! Namelist namcfcdate in configuration namelist : CFC parameters 
    64       READ  ( numnatc_cfg, namcfcdate, IOSTAT = ios, ERR = 902 ) 
    65 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namcfcdate in configuration namelist', lwp ) 
    66       IF(lwm) WRITE ( numonc, namcfcdate ) 
     85      REWIND( numtrc_cfg )              ! Namelist namcfcdate in configuration namelist : CFC parameters 
     86      READ  ( numtrc_cfg, namcfc, IOSTAT = ios, ERR = 902 ) 
     87902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namcfc in configuration namelist', lwp ) 
     88      IF(lwm) WRITE ( numonr, namcfc ) 
    6789 
    6890      IF(lwp) THEN                  ! control print 
    69          WRITE(numout,*) 
     91         WRITE(numout,*) ' ' 
     92         WRITE(numout,*) ' CFCs' 
     93         WRITE(numout,*) ' ' 
    7094         WRITE(numout,*) ' trc_nam: Read namdates, namelist for CFC chemical model' 
    7195         WRITE(numout,*) ' ~~~~~~~' 
     
    76100      IF(lwp) WRITE(numout,*) '    initial year (aa)                       nyear_beg = ', nyear_beg 
    77101      ! 
    78  
    79       IF( .NOT.lk_iomput .AND. ln_diatrc ) THEN 
    80          ! 
    81          ! Namelist namcfcdia 
    82          ! ------------------- 
    83          REWIND( numnatc_ref )              ! Namelist namcfcdia in reference namelist : CFC diagnostics 
    84          READ  ( numnatc_ref, namcfcdia, IOSTAT = ios, ERR = 903) 
    85 903      IF( ios /= 0 ) CALL ctl_nam ( ios , 'namcfcdia in reference namelist', lwp ) 
    86  
    87          REWIND( numnatc_cfg )              ! Namelist namcfcdia in configuration namelist : CFC diagnostics 
    88          READ  ( numnatc_cfg, namcfcdia, IOSTAT = ios, ERR = 904 ) 
    89 904      IF( ios /= 0 ) CALL ctl_nam ( ios , 'namcfcdia in configuration namelist', lwp ) 
    90          IF(lwm) WRITE ( numonc, namcfcdia ) 
    91  
    92          DO jl = 1, jp_cfc_2d 
    93             jn = jp_cfc0_2d + jl - 1 
    94             ctrc2d(jn) = TRIM( cfcdia2d(jl)%sname ) 
    95             ctrc2l(jn) = TRIM( cfcdia2d(jl)%lname ) 
    96             ctrc2u(jn) = TRIM( cfcdia2d(jl)%units ) 
    97          END DO 
    98  
    99          IF(lwp) THEN                   ! control print 
    100             WRITE(numout,*) 
    101             WRITE(numout,*) ' Namelist : natadd' 
    102             DO jl = 1, jp_cfc_2d 
    103                jn = jp_cfc0_2d + jl - 1 
    104                WRITE(numout,*) '  2d diag nb : ', jn, '    short name : ', ctrc2d(jn), & 
    105                  &             '  long name  : ', ctrc2l(jn), '   unit : ', ctrc2u(jn) 
    106             END DO 
    107             WRITE(numout,*) ' ' 
    108          ENDIF 
    109          ! 
    110       ENDIF 
    111  
    112    IF(lwm) CALL FLUSH ( numonc )     ! flush output namelist CFC 
     102      IF(lwm) CALL FLUSH ( numonr )     ! flush output namelist CFC 
    113103 
    114104   END SUBROUTINE trc_nam_cfc 
    115105    
    116 #else 
    117    !!---------------------------------------------------------------------- 
    118    !!  Dummy module :                                                No CFC 
    119    !!---------------------------------------------------------------------- 
    120 CONTAINS 
    121    SUBROUTINE trc_nam_cfc                      ! Empty routine 
    122    END  SUBROUTINE  trc_nam_cfc 
    123 #endif   
    124  
    125106   !!====================================================================== 
    126107END MODULE trcnam_cfc 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/CFC/trcsms_cfc.F90

    r6140 r7403  
    77   !!  NEMO      1.0  !  2004-03  (C. Ethe) free form + modularity 
    88   !!            2.0  !  2007-12  (C. Ethe, G. Madec)  reorganisation 
    9    !!---------------------------------------------------------------------- 
    10 #if defined key_cfc 
    11    !!---------------------------------------------------------------------- 
    12    !!   'key_cfc'                                               CFC tracers 
     9   !!            4.0  !  2016-11  (T. Lovato) Add SF6, Update Schmidt number 
    1310   !!---------------------------------------------------------------------- 
    1411   !!   trc_sms_cfc  :  compute and add CFC suface forcing to CFC trends 
     
    2926 
    3027   INTEGER , PUBLIC, PARAMETER ::   jphem  =   2   ! parameter for the 2 hemispheres 
    31    INTEGER , PUBLIC            ::   jpyear         ! Number of years read in CFC1112 file 
     28   INTEGER , PUBLIC            ::   jpyear         ! Number of years read in input data file (in trcini_cfc) 
    3229   INTEGER , PUBLIC            ::   ndate_beg      ! initial calendar date (aammjj) for CFC 
    3330   INTEGER , PUBLIC            ::   nyear_res      ! restoring time constant (year) 
    3431   INTEGER , PUBLIC            ::   nyear_beg      ! initial year (aa)  
    3532    
    36    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   p_cfc    ! partial hemispheric pressure for CFC 
     33   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   p_cfc    ! partial hemispheric pressure for all CFC 
    3734   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   xphem    ! spatial interpolation factor for patm 
    3835   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qtr_cfc  ! flux at surface 
    3936   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qint_cfc ! cumulative flux  
     37   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   atm_cfc  ! partial hemispheric pressure for used CFC 
    4038   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   patm     ! atmospheric function 
    4139 
    42    REAL(wp), DIMENSION(4,2) ::   soa   ! coefficient for solubility of CFC [mol/l/atm] 
    43    REAL(wp), DIMENSION(3,2) ::   sob   !    "               " 
    44    REAL(wp), DIMENSION(4,2) ::   sca   ! coefficients for schmidt number in degre Celcius 
     40   REAL(wp),         ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   soa      ! coefficient for solubility of CFC [mol/l/atm] 
     41   REAL(wp),         ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   sob      !    "               " 
     42   REAL(wp),         ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   sca      ! coefficients for schmidt number in degrees Celsius 
    4543       
    4644   !                          ! coefficients for conversion 
     
    7977      INTEGER  ::   im1, im2, ierr 
    8078      REAL(wp) ::   ztap, zdtap         
    81       REAL(wp) ::   zt1, zt2, zt3, zv2 
     79      REAL(wp) ::   zt1, zt2, zt3, zt4, zv2 
    8280      REAL(wp) ::   zsol      ! solubility 
    8381      REAL(wp) ::   zsch      ! schmidt number  
     
    117115         ! time interpolation at time kt 
    118116         DO jm = 1, jphem 
    119             zpatm(jm,jl) = (  p_cfc(iyear_beg, jm, jl) * FLOAT (im1)  & 
    120                &           +  p_cfc(iyear_end, jm, jl) * FLOAT (im2) ) / 12. 
     117            zpatm(jm,jl) = (  atm_cfc(iyear_beg, jm, jl) * REAL(im1, wp)  & 
     118               &           +  atm_cfc(iyear_end, jm, jl) * REAL(im2, wp) ) / 12. 
    121119         END DO 
    122120          
     
    145143   
    146144               ! Computation of speed transfert 
    147                !    Schmidt number 
     145               !    Schmidt number revised in Wanninkhof (2014) 
    148146               zt1  = tsn(ji,jj,1,jp_tem) 
    149147               zt2  = zt1 * zt1  
    150148               zt3  = zt1 * zt2 
    151                zsch = sca(1,jl) + sca(2,jl) * zt1 + sca(3,jl) * zt2 + sca(4,jl) * zt3 
    152  
    153                !    speed transfert : formulae of wanninkhof 1992 
     149               zt4  = zt2 * zt2 
     150               zsch = sca(1,jl) + sca(2,jl) * zt1 + sca(3,jl) * zt2 + sca(4,jl) * zt3 + sca(5,jl) * zt4 
     151 
     152               !    speed transfert : formulae revised in Wanninkhof (2014) 
    154153               zv2     = wndm(ji,jj) * wndm(ji,jj) 
    155154               zsch    = zsch / 660. 
    156                zak_cfc = ( 0.39 * xconv2 * zv2 / SQRT(zsch) ) * tmask(ji,jj,1) 
     155               zak_cfc = ( 0.31 * xconv2 * zv2 / SQRT(zsch) ) * tmask(ji,jj,1) 
    157156 
    158157               ! Input function  : speed *( conc. at equil - concen at surface ) 
    159158               ! trn in pico-mol/l idem qtr; ak in en m/a 
    160159               qtr_cfc(ji,jj,jl) = -zak_cfc * ( trb(ji,jj,1,jn) - zca_cfc )   & 
    161 #if defined key_degrad 
    162                   &                         * facvol(ji,jj,1)                           & 
    163 #endif 
    164160                  &                         * tmask(ji,jj,1) * ( 1. - fr_i(ji,jj) ) 
    165161               ! Add the surface flux to the trend 
     
    185181      ! 
    186182      IF( lk_iomput ) THEN 
    187          CALL iom_put( "qtrCFC11"  , qtr_cfc (:,:,1) ) 
    188          CALL iom_put( "qintCFC11" , qint_cfc(:,:,1) ) 
    189       ELSE 
    190          IF( ln_diatrc ) THEN 
    191             trc2d(:,:,jp_cfc0_2d    ) = qtr_cfc (:,:,1) 
    192             trc2d(:,:,jp_cfc0_2d + 1) = qint_cfc(:,:,1) 
    193          END IF 
     183         DO jn = jp_cfc0, jp_cfc1 
     184            CALL iom_put( 'qtr_'//ctrcnm(jn) , qtr_cfc (:,:,jn) ) 
     185            CALL iom_put( 'qint_'//ctrcnm(jn), qint_cfc(:,:,jn) ) 
     186         ENDDO 
    194187      END IF 
    195188      ! 
     
    212205      !!--------------------------------------------------------------------- 
    213206      INTEGER :: jn 
    214  
     207      !!---------------------------------------------------------------------- 
     208      ! 
     209      jn = 0  
    215210      ! coefficient for CFC11  
    216211      !---------------------- 
    217  
    218       ! Solubility 
    219       soa(1,1) = -229.9261  
    220       soa(2,1) =  319.6552 
    221       soa(3,1) =  119.4471 
    222       soa(4,1) =  -1.39165 
    223  
    224       sob(1,1) =  -0.142382 
    225       sob(2,1) =   0.091459 
    226       sob(3,1) =  -0.0157274 
    227  
    228       ! Schmidt number  
    229       sca(1,1) = 3501.8 
    230       sca(2,1) = -210.31 
    231       sca(3,1) =  6.1851 
    232       sca(4,1) = -0.07513 
     212      if ( ln_cfc11 ) then 
     213         jn = jn + 1 
     214         ! Solubility 
     215         soa(1,jn) = -229.9261  
     216         soa(2,jn) =  319.6552 
     217         soa(3,jn) =  119.4471 
     218         soa(4,jn) =  -1.39165 
     219 
     220         sob(1,jn) =  -0.142382 
     221         sob(2,jn) =   0.091459 
     222         sob(3,jn) =  -0.0157274 
     223 
     224         ! Schmidt number  
     225         sca(1,jn) = 3579.2 
     226         sca(2,jn) = -222.63 
     227         sca(3,jn) = 7.5749 
     228         sca(4,jn) = -0.14595 
     229         sca(5,jn) = 0.0011874 
     230 
     231         ! atm. concentration 
     232         atm_cfc(:,:,jn) = p_cfc(:,:,1) 
     233      endif 
    233234 
    234235      ! coefficient for CFC12  
    235236      !---------------------- 
    236  
    237       ! Solubility 
    238       soa(1,2) = -218.0971 
    239       soa(2,2) =  298.9702 
    240       soa(3,2) =  113.8049 
    241       soa(4,2) =  -1.39165 
    242  
    243       sob(1,2) =  -0.143566 
    244       sob(2,2) =   0.091015 
    245       sob(3,2) =  -0.0153924 
    246  
    247       ! schmidt number  
    248       sca(1,2) =  3845.4  
    249       sca(2,2) =  -228.95 
    250       sca(3,2) =  6.1908  
    251       sca(4,2) =  -0.067430 
     237      if ( ln_cfc12 ) then 
     238         jn = jn + 1 
     239         ! Solubility 
     240         soa(1,jn) = -218.0971 
     241         soa(2,jn) =  298.9702 
     242         soa(3,jn) =  113.8049 
     243         soa(4,jn) =  -1.39165 
     244 
     245         sob(1,jn) =  -0.143566 
     246         sob(2,jn) =   0.091015 
     247         sob(3,jn) =  -0.0153924 
     248 
     249         ! schmidt number  
     250         sca(1,jn) = 3828.1 
     251         sca(2,jn) = -249.86 
     252         sca(3,jn) = 8.7603 
     253         sca(4,jn) = -0.1716 
     254         sca(5,jn) = 0.001408 
     255 
     256         ! atm. concentration 
     257         atm_cfc(:,:,jn) = p_cfc(:,:,2) 
     258      endif 
     259 
     260      ! coefficient for SF6 
     261      !---------------------- 
     262      if ( ln_sf6 ) then 
     263         jn = jn + 1 
     264         ! Solubility 
     265         soa(1,jn) = -80.0343 
     266         soa(2,jn) = 117.232 
     267         soa(3,jn) =  29.5817 
     268         soa(4,jn) =   0.0 
     269 
     270         sob(1,jn) =  0.0335183  
     271         sob(2,jn) = -0.0373942  
     272         sob(3,jn) =  0.00774862 
     273 
     274         ! schmidt number 
     275         sca(1,jn) = 3177.5 
     276         sca(2,jn) = -200.57 
     277         sca(3,jn) = 6.8865 
     278         sca(4,jn) = -0.13335 
     279         sca(5,jn) = 0.0010877 
     280   
     281         ! atm. concentration 
     282         atm_cfc(:,:,jn) = p_cfc(:,:,3) 
     283       endif 
    252284 
    253285      IF( ln_rsttr ) THEN 
     
    269301      !!                     ***  ROUTINE trc_sms_cfc_alloc  *** 
    270302      !!---------------------------------------------------------------------- 
    271       ALLOCATE( xphem   (jpi,jpj)        ,     & 
    272          &      qtr_cfc (jpi,jpj,jp_cfc) ,     & 
    273          &      qint_cfc(jpi,jpj,jp_cfc) , STAT=trc_sms_cfc_alloc ) 
     303      ALLOCATE( xphem   (jpi,jpj)        , atm_cfc(jpyear,jphem,jp_cfc)  ,    & 
     304         &      qtr_cfc (jpi,jpj,jp_cfc) , qint_cfc(jpi,jpj,jp_cfc)      ,    & 
     305         &      soa(4,jp_cfc)    ,  sob(3,jp_cfc)   ,  sca(5,jp_cfc)     ,    & 
     306         &      STAT=trc_sms_cfc_alloc ) 
    274307         ! 
    275308      IF( trc_sms_cfc_alloc /= 0 ) CALL ctl_warn('trc_sms_cfc_alloc : failed to allocate arrays.') 
     
    277310   END FUNCTION trc_sms_cfc_alloc 
    278311 
    279 #else 
    280    !!---------------------------------------------------------------------- 
    281    !!   Dummy module                                         No CFC tracers 
    282    !!---------------------------------------------------------------------- 
    283 CONTAINS 
    284    SUBROUTINE trc_sms_cfc( kt )       ! Empty routine 
    285       WRITE(*,*) 'trc_sms_cfc: You should not have seen this print! error?', kt 
    286    END SUBROUTINE trc_sms_cfc 
    287 #endif 
    288  
    289312   !!====================================================================== 
    290313END MODULE trcsms_cfc 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/CFC/trcwri_cfc.F90

    r5836 r7403  
    66   !! History :   1.0  !  2009-05 (C. Ethe)  Original code 
    77   !!---------------------------------------------------------------------- 
    8 #if defined key_top && defined key_cfc && defined key_iomput 
    9    !!---------------------------------------------------------------------- 
    10    !!   'key_cfc'                                           cfc model 
     8#if defined key_top && defined key_iomput 
    119   !!---------------------------------------------------------------------- 
    1210   !! trc_wri_cfc   :  outputs of concentration fields 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/MY_TRC/par_my_trc.F90

    r3680 r7403  
    1010   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    1111   !!---------------------------------------------------------------------- 
    12    USE par_pisces , ONLY : jp_pisces       !: number of tracers in PISCES 
    13    USE par_pisces , ONLY : jp_pisces_2d    !: number of 2D diag in PISCES 
    14    USE par_pisces , ONLY : jp_pisces_3d    !: number of 3D diag in PISCES 
    15    USE par_pisces , ONLY : jp_pisces_trd   !: number of biological diag in PISCES 
    16  
    17    USE par_cfc    , ONLY : jp_cfc          !: number of tracers in CFC 
    18    USE par_cfc    , ONLY : jp_cfc_2d       !: number of tracers in CFC 
    19    USE par_cfc    , ONLY : jp_cfc_3d       !: number of tracers in CFC 
    20    USE par_cfc    , ONLY : jp_cfc_trd      !: number of tracers in CFC 
    21  
    22    USE par_c14b   , ONLY : jp_c14b         !: number of tracers in C14 
    23    USE par_c14b   , ONLY : jp_c14b_2d      !: number of tracers in C14 
    24    USE par_c14b   , ONLY : jp_c14b_3d      !: number of tracers in C14 
    25    USE par_c14b   , ONLY : jp_c14b_trd     !: number of tracers in C14 
    2612 
    2713   IMPLICIT NONE 
    2814 
    29    INTEGER, PARAMETER ::   jp_lm      =  jp_pisces     + jp_cfc     + jp_c14b     !:  
    30    INTEGER, PARAMETER ::   jp_lm_2d   =  jp_pisces_2d  + jp_cfc_2d  + jp_c14b_2d  !: 
    31    INTEGER, PARAMETER ::   jp_lm_3d   =  jp_pisces_3d  + jp_cfc_3d  + jp_c14b_3d  !: 
    32    INTEGER, PARAMETER ::   jp_lm_trd  =  jp_pisces_trd + jp_cfc_trd + jp_c14b_trd !: 
    33  
    34 #if defined key_my_trc 
    35    !!--------------------------------------------------------------------- 
    36    !!   'key_my_trc'                     user defined tracers (MY_TRC) 
    37    !!--------------------------------------------------------------------- 
    38    LOGICAL, PUBLIC, PARAMETER ::   lk_my_trc     = .TRUE.   !: PTS flag  
    39    INTEGER, PUBLIC, PARAMETER ::   jp_my_trc     =  1       !: number of PTS tracers 
    40    INTEGER, PUBLIC, PARAMETER ::   jp_my_trc_2d  =  0       !: additional 2d output arrays ('key_trc_diaadd') 
    41    INTEGER, PUBLIC, PARAMETER ::   jp_my_trc_3d  =  0       !: additional 3d output arrays ('key_trc_diaadd') 
    42    INTEGER, PUBLIC, PARAMETER ::   jp_my_trc_trd =  0       !: number of sms trends for MY_TRC 
    43  
    44    ! assign an index in trc arrays for each PTS prognostic variables 
    45    INTEGER, PUBLIC, PARAMETER ::   jpmyt1 = jp_lm + 1     !: 1st MY_TRC tracer 
    46  
    47 #else 
    48    !!--------------------------------------------------------------------- 
    49    !!   Default                           No user defined tracers (MY_TRC) 
    50    !!--------------------------------------------------------------------- 
    51    LOGICAL, PUBLIC, PARAMETER ::   lk_my_trc     = .FALSE.  !: MY_TRC flag  
    52    INTEGER, PUBLIC, PARAMETER ::   jp_my_trc     =  0       !: No MY_TRC tracers 
    53    INTEGER, PUBLIC, PARAMETER ::   jp_my_trc_2d  =  0       !: No MY_TRC additional 2d output arrays  
    54    INTEGER, PUBLIC, PARAMETER ::   jp_my_trc_3d  =  0       !: No MY_TRC additional 3d output arrays  
    55    INTEGER, PUBLIC, PARAMETER ::   jp_my_trc_trd =  0       !: number of sms trends for MY_TRC 
    56 #endif 
    57  
    5815   ! Starting/ending PISCES do-loop indices (N.B. no PISCES : jpl_pcs < jpf_pcs the do-loop are never done) 
    59    INTEGER, PUBLIC, PARAMETER ::   jp_myt0     = jp_lm     + 1              !: First index of MY_TRC passive tracers 
    60    INTEGER, PUBLIC, PARAMETER ::   jp_myt1     = jp_lm     + jp_my_trc      !: Last  index of MY_TRC passive tracers 
    61    INTEGER, PUBLIC, PARAMETER ::   jp_myt0_2d  = jp_lm_2d  + 1              !: First index of MY_TRC passive tracers 
    62    INTEGER, PUBLIC, PARAMETER ::   jp_myt1_2d  = jp_lm_2d  + jp_my_trc_2d   !: Last  index of MY_TRC passive tracers 
    63    INTEGER, PUBLIC, PARAMETER ::   jp_myt0_3d  = jp_lm_3d  + 1              !: First index of MY_TRC passive tracers 
    64    INTEGER, PUBLIC, PARAMETER ::   jp_myt1_3d  = jp_lm_3d  + jp_my_trc_3d   !: Last  index of MY_TRC passive tracers 
    65    INTEGER, PUBLIC, PARAMETER ::   jp_myt0_trd = jp_lm_trd + 1              !: First index of MY_TRC passive tracers 
    66    INTEGER, PUBLIC, PARAMETER ::   jp_myt1_trd = jp_lm_trd + jp_my_trc_trd  !: Last  index of MY_TRC passive tracers 
    67  
     16   INTEGER, PUBLIC ::   jp_myt0             !: First index of MY_TRC passive tracers 
     17   INTEGER, PUBLIC ::   jp_myt1             !: Last  index of MY_TRC passive tracers 
    6818   !!====================================================================== 
    6919END MODULE par_my_trc 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/MY_TRC/trcice_my_trc.F90

    r5439 r7403  
    33   !!                         ***  MODULE trcice_my_trc  *** 
    44   !!---------------------------------------------------------------------- 
    5 #if defined key_my_trc 
     5   !! trc_ice_my_trc       : MY_TRC model seaice coupling routine 
    66   !!---------------------------------------------------------------------- 
    7    !!   'key_my_trc'                                               CFC tracers 
    8    !!---------------------------------------------------------------------- 
    9    !! trc_ice_my_trc       : MY_TRC model main routine 
     7   !! History :        !  2016  (C. Ethe, T. Lovato) Revised architecture 
    108   !!---------------------------------------------------------------------- 
    119   USE par_trc         ! TOP parameters 
     
    1917 
    2018   !!---------------------------------------------------------------------- 
    21    !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
    22    !! $Id: trcice_my_trc.F90 4990 2014-12-15 16:42:49Z timgraham $ 
     19   !! NEMO/TOP 4.0 , NEMO Consortium (2016) 
     20   !! $Id$ 
    2321   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    2422   !!---------------------------------------------------------------------- 
     
    3432   END SUBROUTINE trc_ice_ini_my_trc 
    3533 
    36 #else 
    37    !!---------------------------------------------------------------------- 
    38    !!   Dummy module                                        No MY_TRC model 
    39    !!---------------------------------------------------------------------- 
    40 CONTAINS 
    41    SUBROUTINE trc_ice_ini_my_trc             ! Empty routine 
    42    END SUBROUTINE trc_ice_ini_my_trc 
    43 #endif 
    44  
    4534   !!====================================================================== 
    4635END MODULE trcice_my_trc 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/MY_TRC/trcini_my_trc.F90

    r5385 r7403  
    44   !! TOP :   initialisation of the MY_TRC tracers 
    55   !!====================================================================== 
    6    !! History :   2.0  !  2007-12  (C. Ethe, G. Madec) Original code 
    7    !!---------------------------------------------------------------------- 
    8 #if defined key_my_trc 
    9    !!---------------------------------------------------------------------- 
    10    !!   'key_my_trc'                                               CFC tracers 
     6   !! History :        !  2007  (C. Ethe, G. Madec) Original code 
     7   !!                  !  2016  (C. Ethe, T. Lovato) Revised architecture 
    118   !!---------------------------------------------------------------------- 
    129   !! trc_ini_my_trc   : MY_TRC model initialisation 
     
    1512   USE oce_trc 
    1613   USE trc 
     14   USE par_my_trc 
     15   USE trcnam_my_trc     ! MY_TRC SMS namelist 
    1716   USE trcsms_my_trc 
    1817 
     
    2322 
    2423   !!---------------------------------------------------------------------- 
    25    !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
     24   !! NEMO/TOP 4.0 , NEMO Consortium (2016) 
    2625   !! $Id$  
    2726   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    3736      !! ** Method  : - Read the namcfc namelist and check the parameter values 
    3837      !!---------------------------------------------------------------------- 
    39  
     38      ! 
     39      CALL trc_nam_my_trc 
     40      ! 
    4041      !                       ! Allocate MY_TRC arrays 
    4142      IF( trc_sms_my_trc_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'trc_ini_my_trc: unable to allocate MY_TRC arrays' ) 
     
    5354   END SUBROUTINE trc_ini_my_trc 
    5455 
    55 #else 
    56    !!---------------------------------------------------------------------- 
    57    !!   Dummy module                                        No MY_TRC model 
    58    !!---------------------------------------------------------------------- 
    59 CONTAINS 
    60    SUBROUTINE trc_ini_my_trc             ! Empty routine 
    61    END SUBROUTINE trc_ini_my_trc 
    62 #endif 
    63  
    6456   !!====================================================================== 
    6557END MODULE trcini_my_trc 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/MY_TRC/trcnam_my_trc.F90

    r3680 r7403  
    44   !! TOP :   initialisation of some run parameters for MY_TRC bio-model 
    55   !!====================================================================== 
    6    !! History :   2.0  !  2007-12  (C. Ethe, G. Madec) Original code 
    7    !!---------------------------------------------------------------------- 
    8 #if defined key_my_trc 
    9    !!---------------------------------------------------------------------- 
    10    !!   'key_my_trc'   :                                       MY_TRC model 
     6   !! History :      !  2007  (C. Ethe, G. Madec) Original code 
     7   !!                !  2016  (C. Ethe, T. Lovato) Revised architecture 
    118   !!---------------------------------------------------------------------- 
    129   !! trc_nam_my_trc      : MY_TRC model initialisation 
     
    2219 
    2320   !!---------------------------------------------------------------------- 
    24    !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
     21   !! NEMO/TOP 4.0 , NEMO Consortium (2016) 
    2522   !! $Id$  
    2623   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
     
    4340   END SUBROUTINE trc_nam_my_trc 
    4441    
    45 #else 
    46    !!---------------------------------------------------------------------- 
    47    !!  Dummy module :                                             No MY_TRC 
    48    !!---------------------------------------------------------------------- 
    49 CONTAINS 
    50    SUBROUTINE trc_nam_my_trc                      ! Empty routine 
    51    END  SUBROUTINE  trc_nam_my_trc 
    52 #endif   
    53  
    5442   !!====================================================================== 
    5543END MODULE trcnam_my_trc 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/MY_TRC/trcsms_my_trc.F90

    r6140 r7403  
    44   !! TOP :   Main module of the MY_TRC tracers 
    55   !!====================================================================== 
    6    !! History :   2.0  !  2007-12  (C. Ethe, G. Madec) Original code 
    7    !!---------------------------------------------------------------------- 
    8 #if defined key_my_trc 
    9    !!---------------------------------------------------------------------- 
    10    !!   'key_my_trc'                                               CFC tracers 
     6   !! History :      !  2007  (C. Ethe, G. Madec)  Original code 
     7   !!                !  2016  (C. Ethe, T. Lovato) Revised architecture 
    118   !!---------------------------------------------------------------------- 
    129   !! trc_sms_my_trc       : MY_TRC model main routine 
     
    1815   USE trd_oce 
    1916   USE trdtrc 
    20    USE trcbc, only : trc_bc_read 
     17   USE trcbc, only : trc_bc 
    2118 
    2219   IMPLICIT NONE 
     
    2926 
    3027   !!---------------------------------------------------------------------- 
    31    !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
     28   !! NEMO/TOP 4.0 , NEMO Consortium (2016) 
    3229   !! $Id$ 
    3330   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    5754      IF( l_trdtrc )  CALL wrk_alloc( jpi, jpj, jpk, ztrmyt ) 
    5855 
    59       CALL trc_bc_read ( kt )       ! tracers: surface and lateral Boundary Conditions 
     56      CALL trc_bc ( kt )       ! tracers: surface and lateral Boundary Conditions 
    6057 
    6158      ! add here the call to BGC model 
     
    7471   END SUBROUTINE trc_sms_my_trc 
    7572 
    76  
    7773   INTEGER FUNCTION trc_sms_my_trc_alloc() 
    7874      !!---------------------------------------------------------------------- 
     
    8884   END FUNCTION trc_sms_my_trc_alloc 
    8985 
    90  
    91 #else 
    92    !!---------------------------------------------------------------------- 
    93    !!   Dummy module                                        No MY_TRC model 
    94    !!---------------------------------------------------------------------- 
    95 CONTAINS 
    96    SUBROUTINE trc_sms_my_trc( kt )             ! Empty routine 
    97       INTEGER, INTENT( in ) ::   kt 
    98       WRITE(*,*) 'trc_sms_my_trc: You should not have seen this print! error?', kt 
    99    END SUBROUTINE trc_sms_my_trc 
    100 #endif 
    101  
    10286   !!====================================================================== 
    10387END MODULE trcsms_my_trc 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/MY_TRC/trcwri_my_trc.F90

    r6140 r7403  
    22   !!====================================================================== 
    33   !!                       *** MODULE trcwri *** 
    4    !!    my_trc :   Output of my_trc tracers 
     4   !!     trc_wri_my_trc   :  outputs of concentration fields 
    55   !!====================================================================== 
    6    !! History :   1.0  !  2009-05 (C. Ethe)  Original code 
     6#if defined key_top && defined key_iomput 
    77   !!---------------------------------------------------------------------- 
    8 #if defined key_top && defined key_my_trc && defined key_iomput 
     8   !! History :      !  2007  (C. Ethe, G. Madec)  Original code 
     9   !!                !  2016  (C. Ethe, T. Lovato) Revised architecture 
    910   !!---------------------------------------------------------------------- 
    10    !!   'key_my_trc'                                           my_trc model 
    11    !!---------------------------------------------------------------------- 
    12    !! trc_wri_my_trc   :  outputs of concentration fields 
    13    !!---------------------------------------------------------------------- 
     11   USE par_trc         ! passive tracers common variables 
    1412   USE trc         ! passive tracers common variables  
    1513   USE iom         ! I/O manager 
     
    2018   PUBLIC trc_wri_my_trc  
    2119 
     20   !!---------------------------------------------------------------------- 
     21   !! NEMO/TOP 4.0 , NEMO Consortium (2016) 
     22   !! $Id$ 
     23   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     24   !!---------------------------------------------------------------------- 
    2225CONTAINS 
    2326 
     
    3639      DO jn = jp_myt0, jp_myt1 
    3740         cltra = TRIM( ctrcnm(jn) )                  ! short title for tracer 
    38          IF( ln_trc_wri(jn) ) CALL iom_put( cltra, trn(:,:,:,jn) ) 
     41         CALL iom_put( cltra, trn(:,:,:,jn) ) 
    3942      END DO 
    4043      ! 
     
    4245 
    4346#else 
    44    !!---------------------------------------------------------------------- 
    45    !!  Dummy module :                                     No passive tracer 
    46    !!---------------------------------------------------------------------- 
    47    PUBLIC trc_wri_my_trc 
     47 
    4848CONTAINS 
    49    SUBROUTINE trc_wri_my_trc                     ! Empty routine   
     49 
     50   SUBROUTINE trc_wri_my_trc 
     51      ! 
    5052   END SUBROUTINE trc_wri_my_trc 
     53 
    5154#endif 
    5255 
    53    !!---------------------------------------------------------------------- 
    54    !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
    55    !! $Id: trcwri_my_trc.F90 3160 2011-11-20 14:27:18Z cetlod $  
    56    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    57    !!====================================================================== 
    5856END MODULE trcwri_my_trc 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zbio.F90

    r6140 r7403  
    88   !!              -   !  2001-03  (M. Levy)  LNO3 + dia2d  
    99   !!             2.0  !  2007-12  (C. Deltel, G. Madec)  F90 
    10    !!---------------------------------------------------------------------- 
    11 #if defined key_pisces_reduced 
    12    !!---------------------------------------------------------------------- 
    13    !!   'key_pisces_reduced'                                     LOBSTER bio-model 
    1410   !!---------------------------------------------------------------------- 
    1511   !!   p2z_bio        :   
     
    8682      !!                                  source      sink 
    8783      !!         
    88       !!              IF 'key_diabio' defined , the biogeochemical trends 
    89       !!              for passive tracers are saved for futher diagnostics. 
    9084      !!--------------------------------------------------------------------- 
    9185      !! 
     
    109103      IF( nn_timing == 1 )  CALL timing_start('p2z_bio') 
    110104      ! 
    111       IF( ln_diatrc .OR. lk_iomput ) THEN 
     105      IF( lk_iomput ) THEN 
    112106         CALL wrk_alloc( jpi, jpj,     17, zw2d ) 
    113107         CALL wrk_alloc( jpi, jpj, jpk, 3, zw3d ) 
     
    121115 
    122116      xksi(:,:) = 0.e0        ! zooplakton closure ( fbod) 
    123       IF( ln_diatrc .OR. lk_iomput ) THEN 
     117      IF( lk_iomput ) THEN 
    124118         zw2d  (:,:,:) = 0.e0 
    125119         zw3d(:,:,:,:) = 0.e0 
     
    218212               tra(ji,jj,jk,jpdom) = tra(ji,jj,jk,jpdom) + zdoma 
    219213 
    220  
    221                IF( ( ln_diabio .AND. .NOT. lk_iomput ) .OR. l_trdtrc ) THEN 
    222                   trbio(ji,jj,jk,jp_pcs0_trd     ) = zno3phy 
    223                   trbio(ji,jj,jk,jp_pcs0_trd +  1) = znh4phy 
    224                   trbio(ji,jj,jk,jp_pcs0_trd +  2) = zphynh4 
    225                   trbio(ji,jj,jk,jp_pcs0_trd +  3) = zphydom 
    226                   trbio(ji,jj,jk,jp_pcs0_trd +  4) = zphyzoo 
    227                   trbio(ji,jj,jk,jp_pcs0_trd +  5) = zphydet 
    228                   trbio(ji,jj,jk,jp_pcs0_trd +  6) = zdetzoo 
    229                   !  trend number 8 in p2zsed 
    230                   trbio(ji,jj,jk,jp_pcs0_trd +  8) = zzoodet 
    231                   trbio(ji,jj,jk,jp_pcs0_trd +  9) = zzoobod 
    232                   trbio(ji,jj,jk,jp_pcs0_trd + 10) = zzoonh4 
    233                   trbio(ji,jj,jk,jp_pcs0_trd + 11) = zzoodom 
    234                   trbio(ji,jj,jk,jp_pcs0_trd + 12) = znh4no3 
    235                   trbio(ji,jj,jk,jp_pcs0_trd + 13) = zdomnh4 
    236                   trbio(ji,jj,jk,jp_pcs0_trd + 14) = zdetnh4 
    237                   trbio(ji,jj,jk,jp_pcs0_trd + 15) = zdetdom 
    238                   !  trend number 17 in p2zexp 
    239                 ENDIF 
    240                 IF( ln_diatrc .OR. lk_iomput ) THEN 
     214                IF( lk_iomput ) THEN 
    241215                  ! convert fluxes in per day 
    242216                  ze3t = e3t_n(ji,jj,jk) * 86400._wp 
     
    340314               tra(ji,jj,jk,jpdom) = tra(ji,jj,jk,jpdom) + zdoma 
    341315               ! 
    342                IF( ( ln_diabio .AND. .NOT. lk_iomput ) .OR. l_trdtrc ) THEN 
    343                   trbio(ji,jj,jk,jp_pcs0_trd     ) = zno3phy 
    344                   trbio(ji,jj,jk,jp_pcs0_trd +  1) = znh4phy 
    345                   trbio(ji,jj,jk,jp_pcs0_trd +  2) = zphynh4 
    346                   trbio(ji,jj,jk,jp_pcs0_trd +  3) = zphydom 
    347                   trbio(ji,jj,jk,jp_pcs0_trd +  4) = zphyzoo 
    348                   trbio(ji,jj,jk,jp_pcs0_trd +  5) = zphydet 
    349                   trbio(ji,jj,jk,jp_pcs0_trd +  6) = zdetzoo 
    350                   !  trend number 8 in p2zsed 
    351                   trbio(ji,jj,jk,jp_pcs0_trd +  8) = zzoodet 
    352                   trbio(ji,jj,jk,jp_pcs0_trd +  9) = zzoobod 
    353                   trbio(ji,jj,jk,jp_pcs0_trd + 10) = zzoonh4 
    354                   trbio(ji,jj,jk,jp_pcs0_trd + 11) = zzoodom 
    355                   trbio(ji,jj,jk,jp_pcs0_trd + 12) = znh4no3 
    356                   trbio(ji,jj,jk,jp_pcs0_trd + 13) = zdomnh4 
    357                   trbio(ji,jj,jk,jp_pcs0_trd + 14) = zdetnh4 
    358                   trbio(ji,jj,jk,jp_pcs0_trd + 15) = zdetdom 
    359                   !  trend number 17 in p2zexp  
    360                 ENDIF 
    361                 IF( ln_diatrc .OR. lk_iomput ) THEN 
     316                IF( lk_iomput ) THEN 
    362317                  ! convert fluxes in per day 
    363318                  ze3t = e3t_n(ji,jj,jk) * 86400._wp 
     
    389344      END DO 
    390345 
    391       IF( ln_diatrc .OR. lk_iomput ) THEN 
     346      IF( lk_iomput ) THEN 
    392347         DO jl = 1, 17  
    393348            CALL lbc_lnk( zw2d(:,:,jl),'T', 1. ) 
     
    420375        CALL iom_put( "FNH4NO3", zw3d(:,:,:,3) ) 
    421376         ! 
    422        ELSE 
    423           IF( ln_diatrc ) THEN 
    424             ! 
    425             trc2d(:,:,jp_pcs0_2d    ) = zw2d(:,:,1)  
    426             trc2d(:,:,jp_pcs0_2d + 1) = zw2d(:,:,2)  
    427             trc2d(:,:,jp_pcs0_2d + 2) = zw2d(:,:,3)  
    428             trc2d(:,:,jp_pcs0_2d + 3) = zw2d(:,:,4)  
    429             trc2d(:,:,jp_pcs0_2d + 4) = zw2d(:,:,5)  
    430             trc2d(:,:,jp_pcs0_2d + 5) = zw2d(:,:,6)  
    431             trc2d(:,:,jp_pcs0_2d + 6) = zw2d(:,:,7)  
    432                      ! trend number 8 is in p2zsed.F 
    433             trc2d(:,:,jp_pcs0_2d +  8) = zw2d(:,:,8)  
    434             trc2d(:,:,jp_pcs0_2d +  9) = zw2d(:,:,9)  
    435             trc2d(:,:,jp_pcs0_2d + 10) = zw2d(:,:,10)  
    436             trc2d(:,:,jp_pcs0_2d + 11) = zw2d(:,:,11)  
    437             trc2d(:,:,jp_pcs0_2d + 12) = zw2d(:,:,12)  
    438             trc2d(:,:,jp_pcs0_2d + 13) = zw2d(:,:,13)  
    439             trc2d(:,:,jp_pcs0_2d + 14) = zw2d(:,:,14)  
    440             trc2d(:,:,jp_pcs0_2d + 15) = zw2d(:,:,15)  
    441             trc2d(:,:,jp_pcs0_2d + 16) = zw2d(:,:,16)  
    442             trc2d(:,:,jp_pcs0_2d + 17) = zw2d(:,:,17)  
    443             ! trend number 19 is in p2zexp.F 
    444             trc3d(:,:,:,jp_pcs0_3d    ) = zw3d(:,:,:,1)  
    445             trc3d(:,:,:,jp_pcs0_3d + 1) = zw3d(:,:,:,2)  
    446             trc3d(:,:,:,jp_pcs0_3d + 2) = zw3d(:,:,:,3)  
    447          ENDIF 
    448         ! 
    449       ENDIF 
    450  
    451       IF( ln_diabio .AND. .NOT. lk_iomput )  THEN 
    452          DO jl = jp_pcs0_trd, jp_pcs1_trd 
    453             CALL lbc_lnk( trbio(:,:,1,jl),'T', 1. ) 
    454          END DO  
    455       ENDIF 
    456       ! 
    457       IF( l_trdtrc ) THEN 
    458          DO jl = jp_pcs0_trd, jp_pcs1_trd 
    459             CALL trd_trc( trbio(:,:,:,jl), jl, kt )   ! handle the trend 
    460          END DO 
    461377      ENDIF 
    462378 
     
    467383      ENDIF 
    468384      ! 
    469       IF( ln_diatrc .OR. lk_iomput ) THEN 
     385      IF( lk_iomput ) THEN 
    470386         CALL wrk_dealloc( jpi, jpj,     17, zw2d ) 
    471387         CALL wrk_dealloc( jpi, jpj, jpk, 3, zw3d ) 
     
    586502   END SUBROUTINE p2z_bio_init 
    587503 
    588 #else 
    589    !!====================================================================== 
    590    !!  Dummy module :                                   No PISCES bio-model 
    591    !!====================================================================== 
    592 CONTAINS 
    593    SUBROUTINE p2z_bio( kt )                   ! Empty routine 
    594       INTEGER, INTENT( in ) ::   kt 
    595       WRITE(*,*) 'p2z_bio: You should not have seen this print! error?', kt 
    596    END SUBROUTINE p2z_bio 
    597 #endif  
    598  
    599504   !!====================================================================== 
    600505END MODULE p2zbio 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zexp.F90

    r6140 r7403  
    1010   !!             3.5  !  2012-03  (C. Ethe)  Merge PISCES-LOBSTER 
    1111   !!---------------------------------------------------------------------- 
    12 #if defined key_pisces_reduced 
    13    !!---------------------------------------------------------------------- 
    14    !!   'key_pisces_reduced'                                     LOBSTER bio-model 
    15    !!---------------------------------------------------------------------- 
    1612   !!   p2z_exp        :  Compute loss of organic matter in the sediments 
    1713   !!---------------------------------------------------------------------- 
     
    6864      INTEGER  ::   ji, jj, jk, jl, ikt 
    6965      REAL(wp) ::   zgeolpoc, zfact, zwork, ze3t, zsedpocd, zmaskt 
    70       REAL(wp), POINTER, DIMENSION(:,:,:) ::  ztrbio 
    7166      REAL(wp), POINTER, DIMENSION(:,:)   ::  zsedpoca 
    7267      CHARACTER (len=25) :: charout 
     
    8075      zsedpoca(:,:) = 0. 
    8176 
    82       IF( l_trdtrc )  THEN 
    83          CALL wrk_alloc( jpi, jpj, jpk, ztrbio )   ! temporary save of trends 
    84          ztrbio(:,:,:) = tra(:,:,:,jpno3) 
    85       ENDIF 
    8677 
    8778      ! VERTICAL DISTRIBUTION OF NEWLY PRODUCED BIOGENIC 
     
    126117  
    127118      ! Oa & Ek: diagnostics depending on jpdia2d !          left as example 
    128       IF( lk_iomput ) THEN   
    129          CALL iom_put( "SEDPOC" , sedpocn ) 
    130       ELSE 
    131          IF( ln_diatrc )           trc2d(:,:,jp_pcs0_2d + 18) = sedpocn(:,:) 
    132       ENDIF 
     119      IF( lk_iomput )  CALL iom_put( "SEDPOC" , sedpocn ) 
    133120 
    134121       
     
    160147      ENDIF 
    161148      ! 
    162       IF( l_trdtrc ) THEN 
    163          ztrbio(:,:,:) = tra(:,:,:,jpno3) - ztrbio(:,:,:) 
    164          jl = jp_pcs0_trd + 16 
    165          CALL trd_trc( ztrbio, jl, kt )   ! handle the trend 
    166          CALL wrk_dealloc( jpi, jpj, jpk, ztrbio )   ! temporary save of trends 
    167       ENDIF 
    168       ! 
    169149      CALL wrk_dealloc( jpi, jpj, zsedpoca)   ! temporary save of trends 
    170150 
     
    281261   END FUNCTION p2z_exp_alloc 
    282262 
    283 #else 
    284    !!====================================================================== 
    285    !!  Dummy module :                                   No PISCES bio-model 
    286    !!====================================================================== 
    287 CONTAINS 
    288    SUBROUTINE p2z_exp( kt )                   ! Empty routine 
    289       INTEGER, INTENT( in ) ::   kt 
    290       WRITE(*,*) 'p2z_exp: You should not have seen this print! error?', kt 
    291    END SUBROUTINE p2z_exp 
    292 #endif  
    293  
    294263   !!====================================================================== 
    295264END MODULE  p2zexp 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zopt.F90

    r6140 r7403  
    1010   !!   NEMO      2.0  !  2007-12  (C. Deltel, G. Madec)  F90 
    1111   !!             3.2  !  2009-04  (C. Ethe, G. Madec)  minor optimisation + style 
    12    !!---------------------------------------------------------------------- 
    13 #if defined key_pisces_reduced 
    14    !!---------------------------------------------------------------------- 
    15    !!   'key_pisces_reduced'                                     LOBSTER bio-model 
    1612   !!---------------------------------------------------------------------- 
    1713   !!   p2z_opt        :   Compute the light availability in the water column 
     
    208204   END SUBROUTINE p2z_opt_init 
    209205 
    210 #else 
    211    !!====================================================================== 
    212    !!  Dummy module :                                   No PISCES bio-model 
    213    !!====================================================================== 
    214 CONTAINS 
    215    SUBROUTINE p2z_opt( kt )                   ! Empty routine 
    216       INTEGER, INTENT( in ) ::   kt 
    217       WRITE(*,*) 'p2z_opt: You should not have seen this print! error?', kt 
    218    END SUBROUTINE p2z_opt 
    219 #endif  
    220  
    221206   !!====================================================================== 
    222207END MODULE  p2zopt 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zsed.F90

    r6140 r7403  
    77   !!              -   !  2000-12 (E. Kestenare)  clean up 
    88   !!             2.0  !  2007-12  (C. Deltel, G. Madec)  F90 + simplifications 
    9    !!---------------------------------------------------------------------- 
    10 #if defined key_pisces_reduced 
    11    !!---------------------------------------------------------------------- 
    12    !!   'key_pisces_reduced'                                     LOBSTER bio-model 
    139   !!---------------------------------------------------------------------- 
    1410   !!   p2z_sed        :  Compute loss of organic matter in the sediments 
     
    6662      CHARACTER (len=25) :: charout 
    6763      REAL(wp), POINTER, DIMENSION(:,:  ) :: zw2d 
    68       REAL(wp), POINTER, DIMENSION(:,:,:) :: zwork, ztra, ztrbio 
     64      REAL(wp), POINTER, DIMENSION(:,:,:) :: zwork, ztra 
    6965      !!--------------------------------------------------------------------- 
    7066      ! 
     
    7975      ! Allocate temporary workspace 
    8076      CALL wrk_alloc( jpi, jpj, jpk, zwork, ztra ) 
    81       IF( l_trdtrc ) THEN 
    82          CALL wrk_alloc( jpi, jpj, jpk, ztrbio ) 
    83          ztrbio(:,:,:) = tra(:,:,:,jpdet) 
    84       ENDIF 
    8577 
    8678      ! sedimentation of detritus  : upstream scheme 
     
    116108            CALL wrk_dealloc( jpi, jpj, zw2d ) 
    117109         ENDIF 
    118       ELSE 
    119          IF( ln_diatrc ) THEN  
    120             CALL wrk_alloc( jpi, jpj, zw2d ) 
    121             zw2d(:,:) =  ztra(:,:,1) * e3t_n(:,:,1) * 86400._wp 
    122             DO jk = 2, jpkm1 
    123                zw2d(:,:) = zw2d(:,:) + ztra(:,:,jk) * e3t_n(:,:,jk) * 86400._wp 
    124             END DO 
    125             trc2d(:,:,jp_pcs0_2d + 7) = zw2d(:,:) 
    126             CALL wrk_dealloc( jpi, jpj, zw2d ) 
    127          ENDIF 
    128110      ENDIF 
    129111      ! 
    130       IF( ln_diabio .AND. .NOT. lk_iomput )  trbio(:,:,:,jp_pcs0_trd + 7) = ztra(:,:,:) 
    131112      CALL wrk_dealloc( jpi, jpj, jpk, zwork, ztra ) 
    132113      ! 
    133       IF( l_trdtrc ) THEN 
    134          ztrbio(:,:,:) = tra(:,:,:,jpdet) - ztrbio(:,:,:) 
    135          jl = jp_pcs0_trd + 7 
    136          CALL trd_trc( ztrbio, jl, kt )   ! handle the trend 
    137          CALL wrk_dealloc( jpi, jpj, jpk, ztrbio ) 
    138       ENDIF 
    139114 
    140115      IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
     
    180155   END SUBROUTINE p2z_sed_init 
    181156 
    182 #else 
    183    !!====================================================================== 
    184    !!  Dummy module :                                   No PISCES bio-model 
    185    !!====================================================================== 
    186 CONTAINS 
    187    SUBROUTINE p2z_sed( kt )                   ! Empty routine 
    188       INTEGER, INTENT( in ) ::   kt 
    189       WRITE(*,*) 'p2z_sed: You should not have seen this print! error?', kt 
    190    END SUBROUTINE p2z_sed 
    191 #endif  
    192  
    193157   !!====================================================================== 
    194158END MODULE  p2zsed 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P2Z/p2zsms.F90

    r5656 r7403  
    66   !! History :   1.0  !            M. Levy 
    77   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  revised architecture 
    8    !!---------------------------------------------------------------------- 
    9 #if defined key_pisces_reduced 
    10    !!---------------------------------------------------------------------- 
    11    !!   'key_pisces_reduced'                              LOBSTER bio-model 
    128   !!---------------------------------------------------------------------- 
    139   !!   p2zsms        :  Time loop of passive tracers sms 
     
    7268   END SUBROUTINE p2z_sms 
    7369 
    74 #else 
    75    !!====================================================================== 
    76    !!  Dummy module :                                     No passive tracer 
    77    !!====================================================================== 
    78 CONTAINS 
    79    SUBROUTINE p2z_sms( kt )                   ! Empty routine 
    80       INTEGER, INTENT( in ) ::   kt 
    81       WRITE(*,*) 'p2z_sms: You should not have seen this print! error?', kt 
    82    END SUBROUTINE p2z_sms 
    83 #endif  
    84  
    8570   !!====================================================================== 
    8671END MODULE p2zsms 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zbio.F90

    r6140 r7403  
    66   !! History :   1.0  !  2004     (O. Aumont) Original code 
    77   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90 
    8    !!---------------------------------------------------------------------- 
    9 #if defined key_pisces 
    10    !!---------------------------------------------------------------------- 
    11    !!   'key_pisces'                                       PISCES bio-model 
    128   !!---------------------------------------------------------------------- 
    139   !!   p4z_bio        :   computes the interactions between the different 
     
    2420   USE p4zmicro        !  Sources and sinks of microzooplankton 
    2521   USE p4zmeso         !  Sources and sinks of mesozooplankton 
     22   USE p5zlim          !  Co-limitations of differents nutrients 
     23   USE p5zprod         !  Growth rate of the 2 phyto groups 
     24   USE p5zmort         !  Mortality terms for phytoplankton 
     25   USE p5zmicro        !  Sources and sinks of microzooplankton 
     26   USE p5zmeso         !  Sources and sinks of mesozooplankton 
    2627   USE p4zrem          !  Remineralisation of organic matter 
     28   USE p4zpoc          !  Remineralization of organic particles 
     29   USE p4zagg          !  Aggregation of particles 
    2730   USE p4zfechem 
     31   USE p4zligand       !  Prognostic ligand model 
    2832   USE prtctl_trc      !  print control for debugging 
    2933   USE iom             !  I/O manager 
     
    7377      END DO 
    7478 
    75       CALL p4z_opt  ( kt, knt )     ! Optic: PAR in the water column 
    76       CALL p4z_sink ( kt, knt )     ! vertical flux of particulate organic matter 
    77       CALL p4z_fechem(kt, knt )     ! Iron chemistry/scavenging 
    78       CALL p4z_lim  ( kt, knt )     ! co-limitations by the various nutrients 
    79       CALL p4z_prod ( kt, knt )     ! phytoplankton growth rate over the global ocean.  
    80       !                             ! (for each element : C, Si, Fe, Chl ) 
    81       CALL p4z_mort ( kt      )     ! phytoplankton mortality 
    82      !                             ! zooplankton sources/sinks routines  
    83       CALL p4z_micro( kt, knt )           ! microzooplankton 
    84       CALL p4z_meso ( kt, knt )           ! mesozooplankton 
    85       CALL p4z_rem  ( kt, knt )     ! remineralization terms of organic matter+scavenging of Fe 
    86       !                             ! test if tracers concentrations fall below 0. 
     79      CALL p4z_opt     ( kt, knt )     ! Optic: PAR in the water column 
     80      CALL p4z_sink    ( kt, knt )     ! vertical flux of particulate organic matter 
     81      CALL p4z_fechem  ( kt, knt )     ! Iron chemistry/scavenging 
     82      ! 
     83      IF( ln_p4z ) THEN 
     84         CALL p4z_lim  ( kt, knt )     ! co-limitations by the various nutrients 
     85         CALL p4z_prod ( kt, knt )     ! phytoplankton growth rate over the global ocean.  
     86         !                             ! (for each element : C, Si, Fe, Chl ) 
     87         CALL p4z_mort ( kt      )     ! phytoplankton mortality 
     88         !                             ! zooplankton sources/sinks routines  
     89         CALL p4z_micro( kt, knt )           ! microzooplankton 
     90         CALL p4z_meso ( kt, knt )           ! mesozooplankton 
     91      ELSE 
     92         CALL p5z_lim  ( kt, knt )     ! co-limitations by the various nutrients 
     93         CALL p5z_prod ( kt, knt )     ! phytoplankton growth rate over the global ocean.  
     94         !                             ! (for each element : C, Si, Fe, Chl ) 
     95         CALL p5z_mort ( kt      )     ! phytoplankton mortality 
     96         !                             ! zooplankton sources/sinks routines  
     97         CALL p5z_micro( kt, knt )           ! microzooplankton 
     98         CALL p5z_meso ( kt, knt )           ! mesozooplankton 
     99      ENDIF 
     100      ! 
     101      CALL p4z_agg  ( kt, knt )     ! Aggregation of particles 
     102      CALL p4z_rem     ( kt, knt )     ! remineralization terms of organic matter+scavenging of Fe 
     103      CALL p4z_poc     ( kt, knt )     ! Remineralization of organic particles 
     104      IF( ln_ligand ) THEN 
     105        CALL p4z_ligand( kt, knt ) 
     106      ENDIF 
    87107      !                                                             ! 
    88108      IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
     
    96116   END SUBROUTINE p4z_bio 
    97117 
    98 #else 
    99    !!====================================================================== 
    100    !!  Dummy module :                                   No PISCES bio-model 
    101    !!====================================================================== 
    102 CONTAINS 
    103    SUBROUTINE p4z_bio                         ! Empty routine 
    104    END SUBROUTINE p4z_bio 
    105 #endif  
    106  
    107118   !!====================================================================== 
    108119END MODULE p4zbio 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zche.F90

    r6945 r7403  
    1111   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90 
    1212   !!                  !  2011-02  (J. Simeon, J.Orr ) update O2 solubility constants 
    13    !!---------------------------------------------------------------------- 
    14 #if defined key_pisces 
    15    !!---------------------------------------------------------------------- 
    16    !!   'key_pisces'                                       PISCES bio-model 
     13   !!             3.6  !  2016-03  (O. Aumont) Change chemistry to MOCSY standards 
    1714   !!---------------------------------------------------------------------- 
    1815   !!   p4z_che      :  Sea water chemistry computed following OCMIP protocol 
     
    2219   USE sms_pisces    !  PISCES Source Minus Sink variables 
    2320   USE lib_mpp       !  MPP library 
     21   USE eosbn2, ONLY : neos 
    2422 
    2523   IMPLICIT NONE 
    2624   PRIVATE 
    2725 
    28    PUBLIC   p4z_che         ! 
    29    PUBLIC   p4z_che_alloc   ! 
    30  
    31    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sio3eq   ! chemistry of Si 
    32    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   fekeq    ! chemistry of Fe 
    33    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   chemc    ! Solubilities of O2 and CO2 
    34    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   chemo2   ! Solubilities of O2 and CO2 
     26   PUBLIC   p4z_che          ! 
     27   PUBLIC   p4z_che_alloc    ! 
     28   PUBLIC   ahini_for_at     ! 
     29   PUBLIC   solve_at_general ! 
     30 
     31   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   :: sio3eq   ! chemistry of Si 
     32   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   :: fekeq    ! chemistry of Fe 
     33   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   :: chemc    ! Solubilities of O2 and CO2 
     34   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)   :: chemo2    ! Solubilities of O2 and CO2 
     35   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: fesol    ! solubility of Fe 
    3536   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   tempis   ! In situ temperature 
     37   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   salinprac  ! Practical salinity 
     38 
     39   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   akb3       !: ??? 
     40   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   akw3       !: ??? 
     41   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   akf3       !: ??? 
     42   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   aks3       !: ??? 
     43   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ak1p3      !: ??? 
     44   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ak2p3      !: ??? 
     45   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ak3p3      !: ??? 
     46   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   aksi3      !: ??? 
     47   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   borat      !: ??? 
     48   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   fluorid    !: ??? 
     49   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sulfat     !: ??? 
     50 
     51   !!* Variable for chemistry of the CO2 cycle 
    3652 
    3753   REAL(wp), PUBLIC ::   atcox  = 0.20946         ! units atm 
    3854 
    39    REAL(wp) ::   salchl = 1. / 1.80655    ! conversion factor for salinity --> chlorinity (Wooster et al. 1969) 
    4055   REAL(wp) ::   o2atm  = 1. / ( 1000. * 0.20946 )   
    4156 
    42    REAL(wp) ::   rgas   = 83.14472       ! universal gas constants 
    43    REAL(wp) ::   oxyco  = 1. / 22.4144   ! converts from liters of an ideal gas to moles 
    44  
    45    REAL(wp) ::   bor1   = 0.00023        ! borat constants 
    46    REAL(wp) ::   bor2   = 1. / 10.82 
    47  
    48    REAL(wp) ::   st1    =      0.14     ! constants for calculate concentrations for sulfate 
    49    REAL(wp) ::   st2    =  1./96.062    !  (Morris & Riley 1966) 
    50  
    51    REAL(wp) ::   ft1    =    0.000067   ! constants for calculate concentrations for fluorides 
    52    REAL(wp) ::   ft2    = 1./18.9984    ! (Dickson & Riley 1979 ) 
    53  
    54    !                                    ! volumetric solubility constants for o2 in ml/L   
    55    REAL(wp) ::   ox0    =  2.00856      ! from Table 1 for Eq 8 of Garcia and Gordon, 1992. 
    56    REAL(wp) ::   ox1    =  3.22400      ! corrects for moisture and fugacity, but not total atmospheric pressure 
    57    REAL(wp) ::   ox2    =  3.99063      !      Original PISCES code noted this was a solubility, but  
    58    REAL(wp) ::   ox3    =  4.80299      ! was in fact a bunsen coefficient with units L-O2/(Lsw atm-O2) 
    59    REAL(wp) ::   ox4    =  9.78188e-1   ! Hence, need to divide EXP( zoxy ) by 1000, ml-O2 => L-O2 
    60    REAL(wp) ::   ox5    =  1.71069      ! and atcox = 0.20946 to add the 1/atm dimension. 
    61    REAL(wp) ::   ox6    = -6.24097e-3    
    62    REAL(wp) ::   ox7    = -6.93498e-3  
    63    REAL(wp) ::   ox8    = -6.90358e-3 
    64    REAL(wp) ::   ox9    = -4.29155e-3  
    65    REAL(wp) ::   ox10   = -3.11680e-7  
     57   REAL(wp) ::   rgas   = 83.14472      ! universal gas constants 
     58   REAL(wp) ::   oxyco  = 1. / 22.4144  ! converts from liters of an ideal gas to moles 
    6659 
    6760   !                                    ! coeff. for seawater pressure correction : millero 95 
    6861   !                                    ! AGRIF doesn't like the DATA instruction 
    69    REAL(wp) :: devk11  = -25.5 
    70    REAL(wp) :: devk12  = -15.82 
    71    REAL(wp) :: devk13  = -29.48 
    72    REAL(wp) :: devk14  = -25.60 
    73    REAL(wp) :: devk15  = -48.76 
     62   REAL(wp) :: devk10  = -25.5 
     63   REAL(wp) :: devk11  = -15.82 
     64   REAL(wp) :: devk12  = -29.48 
     65   REAL(wp) :: devk13  = -20.02 
     66   REAL(wp) :: devk14  = -18.03 
     67   REAL(wp) :: devk15  = -9.78 
     68   REAL(wp) :: devk16  = -48.76 
     69   REAL(wp) :: devk17  = -14.51 
     70   REAL(wp) :: devk18  = -23.12 
     71   REAL(wp) :: devk19  = -26.57 
     72   REAL(wp) :: devk110  = -29.48 
    7473   ! 
    75    REAL(wp) :: devk21  = 0.1271 
    76    REAL(wp) :: devk22  = -0.0219 
    77    REAL(wp) :: devk23  = 0.1622 
    78    REAL(wp) :: devk24  = 0.2324 
    79    REAL(wp) :: devk25  = 0.5304 
     74   REAL(wp) :: devk20  = 0.1271 
     75   REAL(wp) :: devk21  = -0.0219 
     76   REAL(wp) :: devk22  = 0.1622 
     77   REAL(wp) :: devk23  = 0.1119 
     78   REAL(wp) :: devk24  = 0.0466 
     79   REAL(wp) :: devk25  = -0.0090 
     80   REAL(wp) :: devk26  = 0.5304 
     81   REAL(wp) :: devk27  = 0.1211 
     82   REAL(wp) :: devk28  = 0.1758 
     83   REAL(wp) :: devk29  = 0.2020 
     84   REAL(wp) :: devk210  = 0.1622 
    8085   ! 
     86   REAL(wp) :: devk30  = 0. 
    8187   REAL(wp) :: devk31  = 0. 
    82    REAL(wp) :: devk32  = 0. 
    83    REAL(wp) :: devk33  = 2.608E-3 
    84    REAL(wp) :: devk34  = -3.6246E-3 
    85    REAL(wp) :: devk35  = 0. 
     88   REAL(wp) :: devk32  = 2.608E-3 
     89   REAL(wp) :: devk33  = -1.409e-3 
     90   REAL(wp) :: devk34  = 0.316e-3 
     91   REAL(wp) :: devk35  = -0.942e-3 
     92   REAL(wp) :: devk36  = 0. 
     93   REAL(wp) :: devk37  = -0.321e-3 
     94   REAL(wp) :: devk38  = -2.647e-3 
     95   REAL(wp) :: devk39  = -3.042e-3 
     96   REAL(wp) :: devk310  = -2.6080e-3 
    8697   ! 
    87    REAL(wp) :: devk41  = -3.08E-3 
    88    REAL(wp) :: devk42  = 1.13E-3 
    89    REAL(wp) :: devk43  = -2.84E-3 
    90    REAL(wp) :: devk44  = -5.13E-3 
    91    REAL(wp) :: devk45  = -11.76E-3 
     98   REAL(wp) :: devk40  = -3.08E-3 
     99   REAL(wp) :: devk41  = 1.13E-3 
     100   REAL(wp) :: devk42  = -2.84E-3 
     101   REAL(wp) :: devk43  = -5.13E-3 
     102   REAL(wp) :: devk44  = -4.53e-3 
     103   REAL(wp) :: devk45  = -3.91e-3 
     104   REAL(wp) :: devk46  = -11.76e-3 
     105   REAL(wp) :: devk47  = -2.67e-3 
     106   REAL(wp) :: devk48  = -5.15e-3 
     107   REAL(wp) :: devk49  = -4.08e-3 
     108   REAL(wp) :: devk410  = -2.84e-3 
    92109   ! 
    93    REAL(wp) :: devk51  = 0.0877E-3 
    94    REAL(wp) :: devk52  = -0.1475E-3      
    95    REAL(wp) :: devk53  = 0. 
    96    REAL(wp) :: devk54  = 0.0794E-3       
    97    REAL(wp) :: devk55  = 0.3692E-3       
     110   REAL(wp) :: devk50  = 0.0877E-3 
     111   REAL(wp) :: devk51  = -0.1475E-3      
     112   REAL(wp) :: devk52  = 0. 
     113   REAL(wp) :: devk53  = 0.0794E-3       
     114   REAL(wp) :: devk54  = 0.09e-3 
     115   REAL(wp) :: devk55  = 0.054e-3 
     116   REAL(wp) :: devk56  = 0.3692E-3 
     117   REAL(wp) :: devk57  = 0.0427e-3 
     118   REAL(wp) :: devk58  = 0.09e-3 
     119   REAL(wp) :: devk59  = 0.0714e-3 
     120   REAL(wp) :: devk510  = 0.0 
     121   ! 
     122   ! General parameters 
     123   REAL(wp), PARAMETER :: pp_rdel_ah_target = 1.E-4_wp 
     124   REAL(wp), PARAMETER :: pp_ln10 = 2.302585092994045684018_wp 
     125 
     126   ! Maximum number of iterations for each method 
     127   INTEGER, PARAMETER :: jp_maxniter_atgen    = 20 
     128 
     129   ! Bookkeeping variables for each method 
     130   ! - SOLVE_AT_GENERAL 
     131   INTEGER :: niter_atgen    = jp_maxniter_atgen 
    98132 
    99133   !!---------------------------------------------------------------------- 
     
    113147      !!--------------------------------------------------------------------- 
    114148      INTEGER  ::   ji, jj, jk 
    115       REAL(wp) ::   ztkel, zt   , zt2  , zsal  , zsal2 , zbuf1 , zbuf2 
     149      REAL(wp) ::   ztkel, ztkel1, zt , zsal  , zsal2 , zbuf1 , zbuf2 
    116150      REAL(wp) ::   ztgg , ztgg2, ztgg3 , ztgg4 , ztgg5 
    117151      REAL(wp) ::   zpres, ztc  , zcl   , zcpexp, zoxy  , zcpexp2 
    118152      REAL(wp) ::   zsqrt, ztr  , zlogt , zcek1, zc1, zplat 
    119       REAL(wp) ::   zis  , zis2 , zsal15, zisqrt, za1  , za2 
     153      REAL(wp) ::   zis  , zis2 , zsal15, zisqrt, za1, za2 
    120154      REAL(wp) ::   zckb , zck1 , zck2  , zckw  , zak1 , zak2  , zakb , zaksp0, zakw 
     155      REAL(wp) ::   zck1p, zck2p, zck3p, zcksi, zak1p, zak2p, zak3p, zaksi 
    121156      REAL(wp) ::   zst  , zft  , zcks  , zckf  , zaksp1 
     157      REAL(wp) ::   total2free, free2SWS, total2SWS, SWS2total 
     158 
    122159      !!--------------------------------------------------------------------- 
    123160      ! 
    124161      IF( nn_timing == 1 )  CALL timing_start('p4z_che') 
     162      ! 
     163      ! Computation of chemical constants require practical salinity 
     164      ! Thus, when TEOS08 is used, absolute salinity is converted to  
     165      ! practical salinity 
     166      ! ------------------------------------------------------------- 
     167      IF (neos == -1) THEN 
     168         salinprac(:,:,:) = tsn(:,:,:,jp_sal) * 35.0 / 35.16504 
     169      ELSE 
     170         salinprac(:,:,:) = tsn(:,:,:,jp_sal) 
     171      ENDIF 
     172 
    125173      ! 
    126174      ! Computations of chemical constants require in situ temperature 
     
    133181            DO ji = 1, jpi 
    134182               zpres = gdept_n(ji,jj,jk) / 1000. 
    135                za1 = 0.04 * ( 1.0 + 0.185 * tsn(ji,jj,jk,jp_tem) + 0.035 * (tsn(ji,jj,jk,jp_sal) - 35.0) ) 
     183               za1 = 0.04 * ( 1.0 + 0.185 * tsn(ji,jj,jk,jp_tem) + 0.035 * (salinprac(ji,jj,jk) - 35.0) ) 
    136184               za2 = 0.0075 * ( 1.0 - tsn(ji,jj,jk,jp_tem) / 30.0 ) 
    137185               tempis(ji,jj,jk) = tsn(ji,jj,jk,jp_tem) - za1 * zpres + za2 * zpres**2 
     
    142190      ! CHEMICAL CONSTANTS - SURFACE LAYER 
    143191      ! ---------------------------------- 
     192!CDIR NOVERRCHK 
    144193      DO jj = 1, jpj 
     194!CDIR NOVERRCHK 
    145195         DO ji = 1, jpi 
    146196            !                             ! SET ABSOLUTE TEMPERATURE 
    147197            ztkel = tempis(ji,jj,1) + 273.15 
    148198            zt    = ztkel * 0.01 
    149             zt2   = zt * zt 
    150             zsal  = tsn(ji,jj,1,jp_sal) + ( 1.- tmask(ji,jj,1) ) * 35. 
    151             zsal2 = zsal * zsal 
    152             zlogt = LOG( zt ) 
     199            zsal  = salinprac(ji,jj,1) + ( 1.- tmask(ji,jj,1) ) * 35. 
    153200            !                             ! LN(K0) OF SOLUBILITY OF CO2 (EQ. 12, WEISS, 1980) 
    154201            !                             !     AND FOR THE ATMOSPHERE FOR NON IDEAL GAS 
    155202            zcek1 = 9345.17/ztkel - 60.2409 + 23.3585 * LOG(zt) + zsal*(0.023517 - 0.00023656*ztkel    & 
    156203            &       + 0.0047036e-4*ztkel**2) 
    157             !                             ! SET SOLUBILITIES OF O2 AND CO2  
    158             chemc(ji,jj,1) = EXP( zcek1 ) * 1.e-6 * rhop(ji,jj,1) / 1000. ! mol/(kg uatm) 
     204            chemc(ji,jj,1) = EXP( zcek1 ) * 1E-6 * rhop(ji,jj,1) / 1000. ! mol/(L atm) 
    159205            chemc(ji,jj,2) = -1636.75 + 12.0408*ztkel - 0.0327957*ztkel**2 + 0.0000316528*ztkel**3 
    160206            chemc(ji,jj,3) = 57.7 - 0.118*ztkel 
     
    165211      ! OXYGEN SOLUBILITY - DEEP OCEAN 
    166212      ! ------------------------------- 
     213!CDIR NOVERRCHK 
    167214      DO jk = 1, jpk 
     215!CDIR NOVERRCHK 
    168216         DO jj = 1, jpj 
     217!CDIR NOVERRCHK 
    169218            DO ji = 1, jpi 
    170219              ztkel = tempis(ji,jj,jk) + 273.15 
    171               zsal  = tsn(ji,jj,jk,jp_sal) + ( 1.- tmask(ji,jj,jk) ) * 35. 
     220              zsal  = salinprac(ji,jj,jk) + ( 1.- tmask(ji,jj,jk) ) * 35. 
    172221              zsal2 = zsal * zsal 
    173222              ztgg  = LOG( ( 298.15 - tempis(ji,jj,jk) ) / ztkel )  ! Set the GORDON & GARCIA scaled temperature 
     
    176225              ztgg4 = ztgg3 * ztgg 
    177226              ztgg5 = ztgg4 * ztgg 
    178               zoxy  = ox0 + ox1 * ztgg + ox2 * ztgg2 + ox3 * ztgg3 + ox4 * ztgg4 + ox5 * ztgg5   & 
    179                      + zsal * ( ox6 + ox7 * ztgg + ox8 * ztgg2 + ox9 * ztgg3 ) +  ox10 * zsal2 
     227 
     228              zoxy  = 2.00856 + 3.22400 * ztgg + 3.99063 * ztgg2 + 4.80299 * ztgg3    & 
     229              &       + 9.78188e-1 * ztgg4 + 1.71069 * ztgg5 + zsal * ( -6.24097e-3   & 
     230              &       - 6.93498e-3 * ztgg - 6.90358e-3 * ztgg2 - 4.29155e-3 * ztgg3 )   & 
     231              &       - 3.11680e-7 * zsal2 
    180232              chemo2(ji,jj,jk) = ( EXP( zoxy ) * o2atm ) * oxyco * atcox     ! mol/(L atm) 
    181233            END DO 
     
    187239      ! CHEMICAL CONSTANTS - DEEP OCEAN 
    188240      ! ------------------------------- 
     241!CDIR NOVERRCHK 
    189242      DO jk = 1, jpk 
     243!CDIR NOVERRCHK 
    190244         DO jj = 1, jpj 
     245!CDIR NOVERRCHK 
    191246            DO ji = 1, jpi 
    192247 
     
    199254               ! SET ABSOLUTE TEMPERATURE 
    200255               ztkel   = tempis(ji,jj,jk) + 273.15 
    201                zsal    = tsn(ji,jj,jk,jp_sal) + ( 1.-tmask(ji,jj,jk) ) * 35. 
     256               zsal    = salinprac(ji,jj,jk) + ( 1.-tmask(ji,jj,jk) ) * 35. 
    202257               zsqrt  = SQRT( zsal ) 
    203258               zsal15  = zsqrt * zsal 
     
    210265 
    211266               ! CHLORINITY (WOOSTER ET AL., 1969) 
    212                zcl     = zsal * salchl 
     267               zcl     = zsal / 1.80655 
    213268 
    214269               ! TOTAL SULFATE CONCENTR. [MOLES/kg soln] 
    215                zst     = st1 * zcl * st2 
     270               zst     = 0.14 * zcl /96.062 
    216271 
    217272               ! TOTAL FLUORIDE CONCENTR. [MOLES/kg soln] 
    218                zft     = ft1 * zcl * ft2 
     273               zft     = 0.000067 * zcl /18.9984 
    219274 
    220275               ! DISSOCIATION CONSTANT FOR SULFATES on free H scale (Dickson 1990) 
     
    224279               &         - 2698. * ztr * zis**1.5 + 1776.* ztr * zis2         & 
    225280               &         + LOG(1.0 - 0.001005 * zsal)) 
    226                ! 
    227                aphscale(ji,jj,jk) = ( 1. + zst / zcks ) 
    228281 
    229282               ! DISSOCIATION CONSTANT FOR FLUORIDES on free H scale (Dickson and Riley 79) 
     
    239292               &      * zlogt + 0.053105*zsqrt*ztkel 
    240293 
    241  
    242294               ! DISSOCIATION COEFFICIENT FOR CARBONATE ACCORDING TO  
    243295               ! MEHRBACH (1973) REFIT BY MILLERO (1995), seawater scale 
     
    247299                  - 0.01781*zsal + 0.0001122*zsal*zsal) 
    248300 
    249                ! PKW (H2O) (DICKSON AND RILEY, 1979) 
    250                zckw = -13847.26*ztr + 148.9652 - 23.6521 * zlogt    &  
    251                &     + (118.67*ztr - 5.977 + 1.0495 * zlogt)        & 
    252                &     * zsqrt - 0.01615 * zsal 
     301               ! PKW (H2O) (MILLERO, 1995) from composite data 
     302               zckw    = -13847.26 * ztr + 148.9652 - 23.6521 * zlogt + ( 118.67 * ztr    & 
     303                         - 5.977 + 1.0495 * zlogt ) * zsqrt - 0.01615 * zsal 
     304 
     305               ! CONSTANTS FOR PHOSPHATE (MILLERO, 1995) 
     306              zck1p    = -4576.752*ztr + 115.540 - 18.453*zlogt   & 
     307              &          + (-106.736*ztr + 0.69171) * zsqrt       & 
     308              &          + (-0.65643*ztr - 0.01844) * zsal 
     309 
     310              zck2p    = -8814.715*ztr + 172.1033 - 27.927*zlogt  & 
     311              &          + (-160.340*ztr + 1.3566)*zsqrt          & 
     312              &          + (0.37335*ztr - 0.05778)*zsal 
     313 
     314              zck3p    = -3070.75*ztr - 18.126                    & 
     315              &          + (17.27039*ztr + 2.81197) * zsqrt       & 
     316              &          + (-44.99486*ztr - 0.09984) * zsal  
     317 
     318              ! CONSTANT FOR SILICATE, MILLERO (1995) 
     319              zcksi    = -8904.2*ztr  + 117.400 - 19.334*zlogt   & 
     320              &          + (-458.79*ztr + 3.5913) * zisqrt       & 
     321              &          + (188.74*ztr - 1.5998) * zis           & 
     322              &          + (-12.1652*ztr + 0.07871) * zis2       & 
     323              &          + LOG(1.0 - 0.001005*zsal) 
    253324 
    254325               ! APPARENT SOLUBILITY PRODUCT K'SP OF CALCITE IN SEAWATER 
     
    258329                  &      - 0.07711*zsal + 0.0041249*zsal15 
    259330 
     331               ! CONVERT FROM DIFFERENT PH SCALES 
     332               total2free  = 1.0/(1.0 + zst/zcks) 
     333               free2SWS    = 1. + zst/zcks + zft/(zckf*total2free) 
     334               total2SWS   = total2free * free2SWS 
     335               SWS2total   = 1.0 / total2SWS 
     336 
    260337               ! K1, K2 OF CARBONIC ACID, KB OF BORIC ACID, KW (H2O) (LIT.?) 
    261                zak1    = 10**(zck1) 
    262                zak2    = 10**(zck2) 
    263                zakb    = EXP( zckb  ) 
     338               zak1    = 10**(zck1) * total2SWS 
     339               zak2    = 10**(zck2) * total2SWS 
     340               zakb    = EXP( zckb ) * total2SWS 
    264341               zakw    = EXP( zckw ) 
    265342               zaksp1  = 10**(zaksp0) 
     343               zak1p   = exp( zck1p ) 
     344               zak2p   = exp( zck2p ) 
     345               zak3p   = exp( zck3p ) 
     346               zaksi   = exp( zcksi ) 
     347               zckf    = zckf * total2SWS 
    266348 
    267349               ! FORMULA FOR CPEXP AFTER EDMOND & GIESKES (1970) 
     
    275357               !        FORMULA ON P. 1286 IS RIGHT AND CONSISTENT WITH THE 
    276358               !        SIGN IN PARTIAL MOLAR VOLUME CHANGE AS SHOWN ON P. 1285)) 
    277                zcpexp  = zpres /(rgas*ztkel) 
    278                zcpexp2 = zpres * zpres/(rgas*ztkel) 
     359               zcpexp  = zpres / (rgas*ztkel) 
     360               zcpexp2 = zpres * zcpexp 
    279361 
    280362               ! KB OF BORIC ACID, K1,K2 OF CARBONIC ACID PRESSURE 
     
    282364               !        (CF. BROECKER ET AL., 1982) 
    283365 
    284                zbuf1  = -     ( devk11 + devk21 * ztc + devk31 * ztc * ztc ) 
     366               zbuf1  = -     ( devk10 + devk20 * ztc + devk30 * ztc * ztc ) 
     367               zbuf2  = 0.5 * ( devk40 + devk50 * ztc ) 
     368               ak13(ji,jj,jk) = zak1 * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
     369 
     370               zbuf1  =     - ( devk11 + devk21 * ztc + devk31 * ztc * ztc ) 
    285371               zbuf2  = 0.5 * ( devk41 + devk51 * ztc ) 
    286                ak13(ji,jj,jk) = zak1 * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
     372               ak23(ji,jj,jk) = zak2 * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
    287373 
    288374               zbuf1  =     - ( devk12 + devk22 * ztc + devk32 * ztc * ztc ) 
    289375               zbuf2  = 0.5 * ( devk42 + devk52 * ztc ) 
    290                ak23(ji,jj,jk) = zak2 * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
     376               akb3(ji,jj,jk) = zakb * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
    291377 
    292378               zbuf1  =     - ( devk13 + devk23 * ztc + devk33 * ztc * ztc ) 
    293379               zbuf2  = 0.5 * ( devk43 + devk53 * ztc ) 
    294                akb3(ji,jj,jk) = zakb * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
     380               akw3(ji,jj,jk) = zakw * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
    295381 
    296382               zbuf1  =     - ( devk14 + devk24 * ztc + devk34 * ztc * ztc ) 
    297383               zbuf2  = 0.5 * ( devk44 + devk54 * ztc ) 
    298                akw3(ji,jj,jk) = zakw * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
    299  
     384               aks3(ji,jj,jk) = zcks * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
     385 
     386               zbuf1  =     - ( devk15 + devk25 * ztc + devk35 * ztc * ztc ) 
     387               zbuf2  = 0.5 * ( devk45 + devk55 * ztc ) 
     388               akf3(ji,jj,jk) = zckf * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
     389 
     390               zbuf1  =     - ( devk17 + devk27 * ztc + devk37 * ztc * ztc ) 
     391               zbuf2  = 0.5 * ( devk47 + devk57 * ztc ) 
     392               ak1p3(ji,jj,jk) = zak1p * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
     393 
     394               zbuf1  =     - ( devk18 + devk28 * ztc + devk38 * ztc * ztc ) 
     395               zbuf2  = 0.5 * ( devk48 + devk58 * ztc ) 
     396               ak2p3(ji,jj,jk) = zak2p * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
     397 
     398               zbuf1  =     - ( devk19 + devk29 * ztc + devk39 * ztc * ztc ) 
     399               zbuf2  = 0.5 * ( devk49 + devk59 * ztc ) 
     400               ak3p3(ji,jj,jk) = zak3p * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
     401 
     402               zbuf1  =     - ( devk110 + devk210 * ztc + devk310 * ztc * ztc ) 
     403               zbuf2  = 0.5 * ( devk410 + devk510 * ztc ) 
     404               aksi3(ji,jj,jk) = zaksi * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
     405 
     406               ! CONVERT FROM DIFFERENT PH SCALES 
     407               total2free  = 1.0/(1.0 + zst/aks3(ji,jj,jk)) 
     408               free2SWS    = 1. + zst/aks3(ji,jj,jk) + zft/akf3(ji,jj,jk) 
     409               total2SWS   = total2free * free2SWS 
     410               SWS2total   = 1.0 / total2SWS 
     411 
     412               ! Convert to total scale 
     413               ak13(ji,jj,jk)  = ak13(ji,jj,jk)  * SWS2total 
     414               ak23(ji,jj,jk)  = ak23(ji,jj,jk)  * SWS2total 
     415               akb3(ji,jj,jk)  = akb3(ji,jj,jk)  * SWS2total 
     416               akw3(ji,jj,jk)  = akw3(ji,jj,jk)  * SWS2total 
     417               ak1p3(ji,jj,jk) = ak1p3(ji,jj,jk) * SWS2total 
     418               ak2p3(ji,jj,jk) = ak2p3(ji,jj,jk) * SWS2total 
     419               ak3p3(ji,jj,jk) = ak3p3(ji,jj,jk) * SWS2total 
     420               aksi3(ji,jj,jk) = aksi3(ji,jj,jk) * SWS2total 
     421               akf3(ji,jj,jk)  = akf3(ji,jj,jk)  / total2free 
    300422 
    301423               ! APPARENT SOLUBILITY PRODUCT K'SP OF CALCITE  
    302424               !        AS FUNCTION OF PRESSURE FOLLOWING MILLERO 
    303425               !        (P. 1285) AND BERNER (1976) 
    304                zbuf1  =     - ( devk15 + devk25 * ztc + devk35 * ztc * ztc ) 
    305                zbuf2  = 0.5 * ( devk45 + devk55 * ztc ) 
     426               zbuf1  =     - ( devk16 + devk26 * ztc + devk36 * ztc * ztc ) 
     427               zbuf2  = 0.5 * ( devk46 + devk56 * ztc ) 
    306428               aksp(ji,jj,jk) = zaksp1 * EXP( zbuf1 * zcpexp + zbuf2 * zcpexp2 ) 
    307429 
    308                ! TOTAL BORATE CONCENTR. [MOLES/L] 
    309                borat(ji,jj,jk) = bor1 * zcl * bor2 
     430               ! TOTAL F, S, and BORATE CONCENTR. [MOLES/L] 
     431               borat(ji,jj,jk) = 0.0002414 * zcl / 10.811 
     432               sulfat(ji,jj,jk) = zst 
     433               fluorid(ji,jj,jk) = zft  
    310434 
    311435               ! Iron and SIO3 saturation concentration from ... 
    312436               sio3eq(ji,jj,jk) = EXP(  LOG( 10.) * ( 6.44 - 968. / ztkel )  ) * 1.e-6 
    313                fekeq (ji,jj,jk) = 10**( 17.27 - 1565.7 / ( 273.15 + ztc ) ) 
    314  
     437               fekeq (ji,jj,jk) = 10**( 17.27 - 1565.7 / ztkel ) 
     438 
     439               ! Liu and Millero (1999) only valid 5 - 50 degC 
     440               ztkel1 = MAX( 5. , tempis(ji,jj,jk) ) + 273.16 
     441               fesol(ji,jj,jk,1) = 10**(-13.486 - 0.1856* zis**0.5 + 0.3073*zis + 5254.0/ztkel1) 
     442               fesol(ji,jj,jk,2) = 10**(2.517 - 0.8885*zis**0.5 + 0.2139 * zis - 1320.0/ztkel1 ) 
     443               fesol(ji,jj,jk,3) = 10**(0.4511 - 0.3305*zis**0.5 - 1996.0/ztkel1 ) 
     444               fesol(ji,jj,jk,4) = 10**(-0.2965 - 0.7881*zis**0.5 - 4086.0/ztkel1 ) 
     445               fesol(ji,jj,jk,5) = 10**(4.4466 - 0.8505*zis**0.5 - 7980.0/ztkel1 ) 
    315446            END DO 
    316447         END DO 
     
    321452   END SUBROUTINE p4z_che 
    322453 
     454   SUBROUTINE ahini_for_at(p_hini) 
     455      !!--------------------------------------------------------------------- 
     456      !!                     ***  ROUTINE ahini_for_at  *** 
     457      !! 
     458      !! Subroutine returns the root for the 2nd order approximation of the 
     459      !! DIC -- B_T -- A_CB equation for [H+] (reformulated as a cubic  
     460      !! polynomial) around the local minimum, if it exists. 
     461      !! Returns * 1E-03_wp if p_alkcb <= 0 
     462      !!         * 1E-10_wp if p_alkcb >= 2*p_dictot + p_bortot 
     463      !!         * 1E-07_wp if 0 < p_alkcb < 2*p_dictot + p_bortot 
     464      !!                    and the 2nd order approximation does not have  
     465      !!                    a solution 
     466      !!--------------------------------------------------------------------- 
     467      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(OUT)  ::  p_hini 
     468      INTEGER  ::   ji, jj, jk 
     469      REAL(wp)  ::  zca1, zba1 
     470      REAL(wp)  ::  zd, zsqrtd, zhmin 
     471      REAL(wp)  ::  za2, za1, za0 
     472      REAL(wp)  ::  p_dictot, p_bortot, p_alkcb  
     473 
     474      IF( nn_timing == 1 )  CALL timing_start('ahini_for_at') 
     475      ! 
     476      DO jk = 1, jpk 
     477        DO jj = 1, jpj 
     478          DO ji = 1, jpi 
     479            p_alkcb  = trb(ji,jj,jk,jptal) * 1000. / (rhop(ji,jj,jk) + rtrn) 
     480            p_dictot = trb(ji,jj,jk,jpdic) * 1000. / (rhop(ji,jj,jk) + rtrn) 
     481            p_bortot = borat(ji,jj,jk) 
     482            IF (p_alkcb <= 0.) THEN 
     483                p_hini(ji,jj,jk) = 1.e-3 
     484            ELSEIF (p_alkcb >= (2.*p_dictot + p_bortot)) THEN 
     485                p_hini(ji,jj,jk) = 1.e-10_wp 
     486            ELSE 
     487                zca1 = p_dictot/( p_alkcb + rtrn ) 
     488                zba1 = p_bortot/ (p_alkcb + rtrn ) 
     489           ! Coefficients of the cubic polynomial 
     490                za2 = aKb3(ji,jj,jk)*(1. - zba1) + ak13(ji,jj,jk)*(1.-zca1) 
     491                za1 = ak13(ji,jj,jk)*akb3(ji,jj,jk)*(1. - zba1 - zca1)    & 
     492                &     + ak13(ji,jj,jk)*ak23(ji,jj,jk)*(1. - (zca1+zca1)) 
     493                za0 = ak13(ji,jj,jk)*ak23(ji,jj,jk)*akb3(ji,jj,jk)*(1. - zba1 - (zca1+zca1)) 
     494                                        ! Taylor expansion around the minimum 
     495                zd = za2*za2 - 3.*za1   ! Discriminant of the quadratic equation 
     496                                        ! for the minimum close to the root 
     497 
     498                IF(zd > 0.) THEN        ! If the discriminant is positive 
     499                  zsqrtd = SQRT(zd) 
     500                  IF(za2 < 0) THEN 
     501                    zhmin = (-za2 + zsqrtd)/3. 
     502                  ELSE 
     503                    zhmin = -za1/(za2 + zsqrtd) 
     504                  ENDIF 
     505                  p_hini(ji,jj,jk) = zhmin + SQRT(-(za0 + zhmin*(za1 + zhmin*(za2 + zhmin)))/zsqrtd) 
     506                ELSE 
     507                  p_hini(ji,jj,jk) = 1.e-7 
     508                ENDIF 
     509             ! 
     510             ENDIF 
     511          END DO 
     512        END DO 
     513      END DO 
     514      ! 
     515      IF( nn_timing == 1 )  CALL timing_stop('ahini_for_at') 
     516      ! 
     517   END SUBROUTINE ahini_for_at 
     518 
     519   !=============================================================================== 
     520   SUBROUTINE anw_infsup( p_alknw_inf, p_alknw_sup ) 
     521 
     522   ! Subroutine returns the lower and upper bounds of "non-water-selfionization" 
     523   ! contributions to total alkalinity (the infimum and the supremum), i.e 
     524   ! inf(TA - [OH-] + [H+]) and sup(TA - [OH-] + [H+]) 
     525 
     526   ! Argument variables 
     527   REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(OUT) :: p_alknw_inf 
     528   REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(OUT) :: p_alknw_sup 
     529 
     530   p_alknw_inf(:,:,:) =  -trb(:,:,:,jppo4) * 1000. / (rhop(:,:,:) + rtrn) - sulfat(:,:,:)  & 
     531   &              - fluorid(:,:,:) 
     532   p_alknw_sup(:,:,:) =   (2. * trb(:,:,:,jpdic) + 2. * trb(:,:,:,jppo4) + trb(:,:,:,jpsil) )    & 
     533   &               * 1000. / (rhop(:,:,:) + rtrn) + borat(:,:,:)  
     534 
     535   END SUBROUTINE anw_infsup 
     536 
     537 
     538   SUBROUTINE solve_at_general( p_hini, zhi ) 
     539 
     540   ! Universal pH solver that converges from any given initial value, 
     541   ! determines upper an lower bounds for the solution if required 
     542 
     543   ! Argument variables 
     544   !-------------------- 
     545   REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(IN)   :: p_hini 
     546   REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(OUT)  :: zhi 
     547 
     548   ! Local variables 
     549   !----------------- 
     550   INTEGER   ::  ji, jj, jk, jn 
     551   REAL(wp)  ::  zh_ini, zh, zh_prev, zh_lnfactor 
     552   REAL(wp)  ::  zdelta, zh_delta 
     553   REAL(wp)  ::  zeqn, zdeqndh, zalka 
     554   REAL(wp)  ::  aphscale 
     555   REAL(wp)  ::  znumer_dic, zdnumer_dic, zdenom_dic, zalk_dic, zdalk_dic 
     556   REAL(wp)  ::  znumer_bor, zdnumer_bor, zdenom_bor, zalk_bor, zdalk_bor 
     557   REAL(wp)  ::  znumer_po4, zdnumer_po4, zdenom_po4, zalk_po4, zdalk_po4 
     558   REAL(wp)  ::  znumer_sil, zdnumer_sil, zdenom_sil, zalk_sil, zdalk_sil 
     559   REAL(wp)  ::  znumer_so4, zdnumer_so4, zdenom_so4, zalk_so4, zdalk_so4 
     560   REAL(wp)  ::  znumer_flu, zdnumer_flu, zdenom_flu, zalk_flu, zdalk_flu 
     561   REAL(wp)  ::  zalk_wat, zdalk_wat 
     562   REAL(wp)  ::  zfact, p_alktot, zdic, zbot, zpt, zst, zft, zsit 
     563   LOGICAL   ::  l_exitnow 
     564   REAL(wp), PARAMETER :: pz_exp_threshold = 1.0 
     565   REAL(wp), POINTER, DIMENSION(:,:,:) :: zalknw_inf, zalknw_sup, rmask, zh_min, zh_max, zeqn_absmin 
     566 
     567   IF( nn_timing == 1 )  CALL timing_start('solve_at_general') 
     568      !  Allocate temporary workspace 
     569   CALL wrk_alloc( jpi, jpj, jpk, zalknw_inf, zalknw_sup, rmask ) 
     570   CALL wrk_alloc( jpi, jpj, jpk, zh_min, zh_max, zeqn_absmin ) 
     571 
     572   CALL anw_infsup( zalknw_inf, zalknw_sup ) 
     573 
     574   rmask(:,:,:) = tmask(:,:,:) 
     575   zhi(:,:,:)   = 0. 
     576 
     577   ! TOTAL H+ scale: conversion factor for Htot = aphscale * Hfree 
     578   DO jk = 1, jpk 
     579      DO jj = 1, jpj 
     580         DO ji = 1, jpi 
     581            IF (rmask(ji,jj,jk) == 1.) THEN 
     582               p_alktot = trb(ji,jj,jk,jptal) * 1000. / (rhop(ji,jj,jk) + rtrn) 
     583               aphscale = 1. + sulfat(ji,jj,jk)/aks3(ji,jj,jk) 
     584               zh_ini = p_hini(ji,jj,jk) 
     585 
     586               zdelta = (p_alktot-zalknw_inf(ji,jj,jk))**2 + 4.*akw3(ji,jj,jk)/aphscale 
     587 
     588               IF(p_alktot >= zalknw_inf(ji,jj,jk)) THEN 
     589                 zh_min(ji,jj,jk) = 2.*akw3(ji,jj,jk) /( p_alktot-zalknw_inf(ji,jj,jk) + SQRT(zdelta) ) 
     590               ELSE 
     591                 zh_min(ji,jj,jk) = aphscale*(-(p_alktot-zalknw_inf(ji,jj,jk)) + SQRT(zdelta) ) / 2. 
     592               ENDIF 
     593 
     594               zdelta = (p_alktot-zalknw_sup(ji,jj,jk))**2 + 4.*akw3(ji,jj,jk)/aphscale 
     595 
     596               IF(p_alktot <= zalknw_sup(ji,jj,jk)) THEN 
     597                 zh_max(ji,jj,jk) = aphscale*(-(p_alktot-zalknw_sup(ji,jj,jk)) + SQRT(zdelta) ) / 2. 
     598               ELSE 
     599                 zh_max(ji,jj,jk) = 2.*akw3(ji,jj,jk) /( p_alktot-zalknw_sup(ji,jj,jk) + SQRT(zdelta) ) 
     600               ENDIF 
     601 
     602               zhi(ji,jj,jk) = MAX(MIN(zh_max(ji,jj,jk), zh_ini), zh_min(ji,jj,jk)) 
     603            ENDIF 
     604         END DO 
     605      END DO 
     606   END DO 
     607 
     608   zeqn_absmin(:,:,:) = HUGE(1._wp) 
     609 
     610   DO jn = 1, jp_maxniter_atgen  
     611   DO jk = 1, jpk 
     612      DO jj = 1, jpj 
     613         DO ji = 1, jpi 
     614            IF (rmask(ji,jj,jk) == 1.) THEN 
     615               zfact = rhop(ji,jj,jk) / 1000. + rtrn 
     616               p_alktot = trb(ji,jj,jk,jptal) / zfact 
     617               zdic  = trb(ji,jj,jk,jpdic) / zfact 
     618               zbot  = borat(ji,jj,jk) 
     619               zpt = trb(ji,jj,jk,jppo4) / zfact * po4r 
     620               zsit = trb(ji,jj,jk,jpsil) / zfact 
     621               zst = sulfat (ji,jj,jk) 
     622               zft = fluorid(ji,jj,jk) 
     623               aphscale = 1. + sulfat(ji,jj,jk)/aks3(ji,jj,jk) 
     624               zh = zhi(ji,jj,jk) 
     625               zh_prev = zh 
     626 
     627               ! H2CO3 - HCO3 - CO3 : n=2, m=0 
     628               znumer_dic = 2.*ak13(ji,jj,jk)*ak23(ji,jj,jk) + zh*ak13(ji,jj,jk) 
     629               zdenom_dic = ak13(ji,jj,jk)*ak23(ji,jj,jk) + zh*(ak13(ji,jj,jk) + zh) 
     630               zalk_dic   = zdic * (znumer_dic/zdenom_dic) 
     631               zdnumer_dic = ak13(ji,jj,jk)*ak13(ji,jj,jk)*ak23(ji,jj,jk) + zh     & 
     632                             *(4.*ak13(ji,jj,jk)*ak23(ji,jj,jk) + zh*ak13(ji,jj,jk)) 
     633               zdalk_dic   = -zdic*(zdnumer_dic/zdenom_dic**2) 
     634 
     635 
     636               ! B(OH)3 - B(OH)4 : n=1, m=0 
     637               znumer_bor = akb3(ji,jj,jk) 
     638               zdenom_bor = akb3(ji,jj,jk) + zh 
     639               zalk_bor   = zbot * (znumer_bor/zdenom_bor) 
     640               zdnumer_bor = akb3(ji,jj,jk) 
     641               zdalk_bor   = -zbot*(zdnumer_bor/zdenom_bor**2) 
     642 
     643 
     644               ! H3PO4 - H2PO4 - HPO4 - PO4 : n=3, m=1 
     645               znumer_po4 = 3.*ak1p3(ji,jj,jk)*ak2p3(ji,jj,jk)*ak3p3(ji,jj,jk)  & 
     646               &            + zh*(2.*ak1p3(ji,jj,jk)*ak2p3(ji,jj,jk) + zh* ak1p3(ji,jj,jk)) 
     647               zdenom_po4 = ak1p3(ji,jj,jk)*ak2p3(ji,jj,jk)*ak3p3(ji,jj,jk)     & 
     648               &            + zh*( ak1p3(ji,jj,jk)*ak2p3(ji,jj,jk) + zh*(ak1p3(ji,jj,jk) + zh)) 
     649               zalk_po4   = zpt * (znumer_po4/zdenom_po4 - 1.) ! Zero level of H3PO4 = 1 
     650               zdnumer_po4 = ak1p3(ji,jj,jk)*ak2p3(ji,jj,jk)*ak1p3(ji,jj,jk)*ak2p3(ji,jj,jk)*ak3p3(ji,jj,jk)  & 
     651               &             + zh*(4.*ak1p3(ji,jj,jk)*ak1p3(ji,jj,jk)*ak2p3(ji,jj,jk)*ak3p3(ji,jj,jk)         & 
     652               &             + zh*(9.*ak1p3(ji,jj,jk)*ak2p3(ji,jj,jk)*ak3p3(ji,jj,jk)                         & 
     653               &             + ak1p3(ji,jj,jk)*ak1p3(ji,jj,jk)*ak2p3(ji,jj,jk)                                & 
     654               &             + zh*(4.*ak1p3(ji,jj,jk)*ak2p3(ji,jj,jk) + zh * ak1p3(ji,jj,jk) ) ) ) 
     655               zdalk_po4   = -zpt * (zdnumer_po4/zdenom_po4**2) 
     656 
     657               ! H4SiO4 - H3SiO4 : n=1, m=0 
     658               znumer_sil = aksi3(ji,jj,jk) 
     659               zdenom_sil = aksi3(ji,jj,jk) + zh 
     660               zalk_sil   = zsit * (znumer_sil/zdenom_sil) 
     661               zdnumer_sil = aksi3(ji,jj,jk) 
     662               zdalk_sil   = -zsit * (zdnumer_sil/zdenom_sil**2) 
     663 
     664               ! HSO4 - SO4 : n=1, m=1 
     665               aphscale = 1.0 + zst/aks3(ji,jj,jk) 
     666               znumer_so4 = aks3(ji,jj,jk) * aphscale 
     667               zdenom_so4 = aks3(ji,jj,jk) * aphscale + zh 
     668               zalk_so4   = zst * (znumer_so4/zdenom_so4 - 1.) 
     669               zdnumer_so4 = aks3(ji,jj,jk) 
     670               zdalk_so4   = -zst * (zdnumer_so4/zdenom_so4**2) 
     671 
     672               ! HF - F : n=1, m=1 
     673               znumer_flu =  akf3(ji,jj,jk) 
     674               zdenom_flu =  akf3(ji,jj,jk) + zh 
     675               zalk_flu   =  zft * (znumer_flu/zdenom_flu - 1.) 
     676               zdnumer_flu = akf3(ji,jj,jk) 
     677               zdalk_flu   = -zft * (zdnumer_flu/zdenom_flu**2) 
     678 
     679               ! H2O - OH 
     680               aphscale = 1.0 + zst/aks3(ji,jj,jk) 
     681               zalk_wat   = akw3(ji,jj,jk)/zh - zh/aphscale 
     682               zdalk_wat  = -akw3(ji,jj,jk)/zh**2 - 1./aphscale 
     683 
     684               ! CALCULATE [ALK]([CO3--], [HCO3-]) 
     685               zeqn = zalk_dic + zalk_bor + zalk_po4 + zalk_sil   & 
     686               &      + zalk_so4 + zalk_flu                       & 
     687               &      + zalk_wat - p_alktot 
     688 
     689               zalka = p_alktot - (zalk_bor + zalk_po4 + zalk_sil   & 
     690               &       + zalk_so4 + zalk_flu + zalk_wat) 
     691 
     692               zdeqndh = zdalk_dic + zdalk_bor + zdalk_po4 + zdalk_sil & 
     693               &         + zdalk_so4 + zdalk_flu + zdalk_wat 
     694 
     695               ! Adapt bracketing interval 
     696               IF(zeqn > 0._wp) THEN 
     697                 zh_min(ji,jj,jk) = zh_prev 
     698               ELSEIF(zeqn < 0._wp) THEN 
     699                 zh_max(ji,jj,jk) = zh_prev 
     700               ENDIF 
     701 
     702               IF(ABS(zeqn) >= 0.5_wp*zeqn_absmin(ji,jj,jk)) THEN 
     703               ! if the function evaluation at the current point is 
     704               ! not decreasing faster than with a bisection step (at least linearly) 
     705               ! in absolute value take one bisection step on [ph_min, ph_max] 
     706               ! ph_new = (ph_min + ph_max)/2d0 
     707               ! 
     708               ! In terms of [H]_new: 
     709               ! [H]_new = 10**(-ph_new) 
     710               !         = 10**(-(ph_min + ph_max)/2d0) 
     711               !         = SQRT(10**(-(ph_min + phmax))) 
     712               !         = SQRT(zh_max * zh_min) 
     713                  zh = SQRT(zh_max(ji,jj,jk) * zh_min(ji,jj,jk)) 
     714                  zh_lnfactor = (zh - zh_prev)/zh_prev ! Required to test convergence below 
     715               ELSE 
     716               ! dzeqn/dpH = dzeqn/d[H] * d[H]/dpH 
     717               !           = -zdeqndh * LOG(10) * [H] 
     718               ! \Delta pH = -zeqn/(zdeqndh*d[H]/dpH) = zeqn/(zdeqndh*[H]*LOG(10)) 
     719               ! 
     720               ! pH_new = pH_old + \deltapH 
     721               ! 
     722               ! [H]_new = 10**(-pH_new) 
     723               !         = 10**(-pH_old - \Delta pH) 
     724               !         = [H]_old * 10**(-zeqn/(zdeqndh*[H]_old*LOG(10))) 
     725               !         = [H]_old * EXP(-LOG(10)*zeqn/(zdeqndh*[H]_old*LOG(10))) 
     726               !         = [H]_old * EXP(-zeqn/(zdeqndh*[H]_old)) 
     727 
     728                  zh_lnfactor = -zeqn/(zdeqndh*zh_prev) 
     729 
     730                  IF(ABS(zh_lnfactor) > pz_exp_threshold) THEN 
     731                     zh          = zh_prev*EXP(zh_lnfactor) 
     732                  ELSE 
     733                     zh_delta    = zh_lnfactor*zh_prev 
     734                     zh          = zh_prev + zh_delta 
     735                  ENDIF 
     736 
     737                  IF( zh < zh_min(ji,jj,jk) ) THEN 
     738                     ! if [H]_new < [H]_min 
     739                     ! i.e., if ph_new > ph_max then 
     740                     ! take one bisection step on [ph_prev, ph_max] 
     741                     ! ph_new = (ph_prev + ph_max)/2d0 
     742                     ! In terms of [H]_new: 
     743                     ! [H]_new = 10**(-ph_new) 
     744                     !         = 10**(-(ph_prev + ph_max)/2d0) 
     745                     !         = SQRT(10**(-(ph_prev + phmax))) 
     746                     !         = SQRT([H]_old*10**(-ph_max)) 
     747                     !         = SQRT([H]_old * zh_min) 
     748                     zh                = SQRT(zh_prev * zh_min(ji,jj,jk)) 
     749                     zh_lnfactor       = (zh - zh_prev)/zh_prev ! Required to test convergence below 
     750                  ENDIF 
     751 
     752                  IF( zh > zh_max(ji,jj,jk) ) THEN 
     753                     ! if [H]_new > [H]_max 
     754                     ! i.e., if ph_new < ph_min, then 
     755                     ! take one bisection step on [ph_min, ph_prev] 
     756                     ! ph_new = (ph_prev + ph_min)/2d0 
     757                     ! In terms of [H]_new: 
     758                     ! [H]_new = 10**(-ph_new) 
     759                     !         = 10**(-(ph_prev + ph_min)/2d0) 
     760                     !         = SQRT(10**(-(ph_prev + ph_min))) 
     761                     !         = SQRT([H]_old*10**(-ph_min)) 
     762                     !         = SQRT([H]_old * zhmax) 
     763                     zh                = SQRT(zh_prev * zh_max(ji,jj,jk)) 
     764                     zh_lnfactor       = (zh - zh_prev)/zh_prev ! Required to test convergence below 
     765                  ENDIF 
     766               ENDIF 
     767 
     768               zeqn_absmin(ji,jj,jk) = MIN( ABS(zeqn), zeqn_absmin(ji,jj,jk)) 
     769 
     770               ! Stop iterations once |\delta{[H]}/[H]| < rdel 
     771               ! <=> |(zh - zh_prev)/zh_prev| = |EXP(-zeqn/(zdeqndh*zh_prev)) -1| < rdel 
     772               ! |EXP(-zeqn/(zdeqndh*zh_prev)) -1| ~ |zeqn/(zdeqndh*zh_prev)| 
     773 
     774               ! Alternatively: 
     775               ! |\Delta pH| = |zeqn/(zdeqndh*zh_prev*LOG(10))| 
     776               !             ~ 1/LOG(10) * |\Delta [H]|/[H] 
     777               !             < 1/LOG(10) * rdel 
     778 
     779               ! Hence |zeqn/(zdeqndh*zh)| < rdel 
     780 
     781               ! rdel <-- pp_rdel_ah_target 
     782               l_exitnow = (ABS(zh_lnfactor) < pp_rdel_ah_target) 
     783 
     784               IF(l_exitnow) THEN  
     785                  rmask(ji,jj,jk) = 0. 
     786               ENDIF 
     787 
     788               zhi(ji,jj,jk) =  zh 
     789 
     790               IF(jn >= jp_maxniter_atgen) THEN 
     791                  zhi(ji,jj,jk) = -1._wp 
     792               ENDIF 
     793 
     794            ENDIF 
     795         END DO 
     796      END DO 
     797   END DO 
     798   END DO 
     799   ! 
     800   CALL wrk_dealloc( jpi, jpj, jpk, zalknw_inf, zalknw_sup, rmask ) 
     801   CALL wrk_dealloc( jpi, jpj, jpk, zh_min, zh_max, zeqn_absmin ) 
     802 
     803 
     804   IF( nn_timing == 1 )  CALL timing_stop('solve_at_general') 
     805 
     806 
     807   END SUBROUTINE solve_at_general 
    323808 
    324809   INTEGER FUNCTION p4z_che_alloc() 
     
    326811      !!                     ***  ROUTINE p4z_che_alloc  *** 
    327812      !!---------------------------------------------------------------------- 
    328       ALLOCATE( sio3eq(jpi,jpj,jpk), fekeq(jpi,jpj,jpk), chemc(jpi,jpj,3), chemo2(jpi,jpj,jpk),   & 
    329       &         tempis(jpi,jpj,jpk), STAT=p4z_che_alloc ) 
     813      INTEGER ::   ierr(3)        ! Local variables 
     814      !!---------------------------------------------------------------------- 
     815 
     816      ierr(:) = 0 
     817 
     818      ALLOCATE( sio3eq(jpi,jpj,jpk), fekeq(jpi,jpj,jpk), chemc(jpi,jpj,3), chemo2(jpi,jpj,jpk), STAT=ierr(1) ) 
     819 
     820      ALLOCATE( akb3(jpi,jpj,jpk)     , tempis(jpi, jpj, jpk),       & 
     821         &      akw3(jpi,jpj,jpk)     , borat (jpi,jpj,jpk)  ,       & 
     822         &      aks3(jpi,jpj,jpk)     , akf3(jpi,jpj,jpk)    ,       & 
     823         &      ak1p3(jpi,jpj,jpk)    , ak2p3(jpi,jpj,jpk)   ,       & 
     824         &      ak3p3(jpi,jpj,jpk)    , aksi3(jpi,jpj,jpk)   ,       & 
     825         &      fluorid(jpi,jpj,jpk)  , sulfat(jpi,jpj,jpk)  ,       & 
     826         &      salinprac(jpi,jpj,jpk),                 STAT=ierr(2) ) 
     827 
     828      ALLOCATE( fesol(jpi,jpj,jpk,5), STAT=ierr(3) ) 
     829 
     830      !* Variable for chemistry of the CO2 cycle 
     831      p4z_che_alloc = MAXVAL( ierr ) 
    330832      ! 
    331833      IF( p4z_che_alloc /= 0 )   CALL ctl_warn('p4z_che_alloc : failed to allocate arrays.') 
     
    333835   END FUNCTION p4z_che_alloc 
    334836 
    335 #else 
    336837   !!====================================================================== 
    337    !!  Dummy module :                                   No PISCES bio-model 
    338    !!====================================================================== 
    339 CONTAINS 
    340    SUBROUTINE p4z_che( kt )                   ! Empty routine 
    341       INTEGER, INTENT(in) ::   kt 
    342       WRITE(*,*) 'p4z_che: You should not have seen this print! error?', kt 
    343    END SUBROUTINE p4z_che 
    344 #endif  
    345  
    346    !!====================================================================== 
    347 END MODULE p4zche 
     838END MODULE  p4zche 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zfechem.F90

    r6140 r7403  
    55   !!====================================================================== 
    66   !! History :   3.5  !  2012-07 (O. Aumont, A. Tagliabue, C. Ethe) Original code 
    7    !!---------------------------------------------------------------------- 
    8 #if defined key_pisces 
    9    !!---------------------------------------------------------------------- 
    10    !!   'key_top'       and                                      TOP models 
    11    !!   'key_pisces'                                       PISCES bio-model 
     7   !!             3.6  !  2015-05  (O. Aumont) PISCES quota 
    128   !!---------------------------------------------------------------------- 
    139   !!   p4z_fechem       :  Compute remineralization/scavenging of iron 
     
    1814   USE trc             !  passive tracers common variables  
    1915   USE sms_pisces      !  PISCES Source Minus Sink variables 
    20    USE p4zopt          !  optical model 
    2116   USE p4zche          !  chemical model 
    2217   USE p4zsbc          !  Boundary conditions from sediments 
     
    3025   PUBLIC   p4z_fechem_init ! called in trcsms_pisces.F90 
    3126 
    32    LOGICAL          ::   ln_fechem    !: boolean for complex iron chemistry following Tagliabue and voelker 
    33    LOGICAL          ::   ln_ligvar    !: boolean for variable ligand concentration following Tagliabue and voelker 
    34    REAL(wp), PUBLIC ::   xlam1        !: scavenging rate of Iron  
    35    REAL(wp), PUBLIC ::   xlamdust     !: scavenging rate of Iron by dust  
    36    REAL(wp), PUBLIC ::   ligand       !: ligand concentration in the ocean  
    37  
    38 !!gm Not DOCTOR norm !!! 
     27   !! * Shared module variables 
     28   LOGICAL          ::  ln_fechem    !: boolean for complex iron chemistry following Tagliabue and voelker 
     29   LOGICAL          ::  ln_ligvar    !: boolean for variable ligand concentration following Tagliabue and voelker 
     30   LOGICAL          ::  ln_fecolloid !: boolean for variable colloidal fraction 
     31   REAL(wp), PUBLIC ::  xlam1        !: scavenging rate of Iron  
     32   REAL(wp), PUBLIC ::  xlamdust     !: scavenging rate of Iron by dust  
     33   REAL(wp), PUBLIC ::  ligand       !: ligand concentration in the ocean  
     34   REAL(wp), PUBLIC ::  kfep         !: rate constant for nanoparticle formation 
     35 
    3936   REAL(wp) :: kl1, kl2, kb1, kb2, ks, kpr, spd, con, kth 
    4037 
     
    5956      !!                    and one particulate form (ln_fechem) 
    6057      !!--------------------------------------------------------------------- 
    61       INTEGER, INTENT(in) ::   kt, knt   ! ocean time step 
    62       ! 
    63       INTEGER  ::   ji, jj, jk, jic 
    64       CHARACTER (len=25) :: charout 
     58      ! 
     59      INTEGER, INTENT(in) ::   kt, knt ! ocean time step 
     60      ! 
     61      INTEGER  ::   ji, jj, jk, jic, jn 
    6562      REAL(wp) ::   zdep, zlam1a, zlam1b, zlamfac 
    66       REAL(wp) ::   zkeq, zfeequi, zfesatur, zfecoll 
     63      REAL(wp) ::   zkeq, zfeequi, zfesatur, zfecoll, fe3sol 
    6764      REAL(wp) ::   zdenom1, zscave, zaggdfea, zaggdfeb, zcoag 
    6865      REAL(wp) ::   ztrc, zdust 
    69 #if ! defined key_kriest 
    70       REAL(wp) ::   zdenom, zdenom2 
    71 #endif 
    72       REAL(wp), POINTER, DIMENSION(:,:,:) :: zTL1, zFe3, ztotlig 
    73       REAL(wp), POINTER, DIMENSION(:,:,:) :: zFeL1, zFeL2, zTL2, zFe2, zFeP 
     66      REAL(wp) ::   zdenom2 
     67      REAL(wp) ::   zzFeL1, zzFeL2, zzFe2, zzFeP, zzFe3, zzstrn2 
     68      REAL(wp) ::   zrum, zcodel, zargu, zlight 
    7469      REAL(wp) :: zkox, zkph1, zkph2, zph, zionic, ztligand 
    7570      REAL(wp) :: za, zb, zc, zkappa1, zkappa2, za0, za1, za2 
    7671      REAL(wp) :: zxs, zfunc, zp, zq, zd, zr, zphi, zfff, zp3, zq2 
    77       REAL(wp) :: ztfe, zoxy 
    78       REAL(wp) :: zstep 
     72      REAL(wp) :: ztfe, zoxy, zhplus 
     73      REAL(wp) :: zaggliga, zaggligb 
     74      REAL(wp) :: dissol, zligco 
     75      CHARACTER (len=25) :: charout 
     76      REAL(wp), POINTER, DIMENSION(:,:,:) :: zTL1, zFe3, ztotlig, precip 
     77      REAL(wp), POINTER, DIMENSION(:,:,:) :: zFeL1, zFeL2, zTL2, zFe2, zFeP 
     78      REAL(wp), POINTER, DIMENSION(:,:  ) :: zstrn, zstrn2 
    7979      !!--------------------------------------------------------------------- 
    8080      ! 
    8181      IF( nn_timing == 1 )  CALL timing_start('p4z_fechem') 
    8282      ! 
    83       CALL wrk_alloc( jpi,jpj,jpk,   zFe3, zFeL1, zTL1, ztotlig ) 
     83      ! Allocate temporary workspace 
     84      CALL wrk_alloc( jpi, jpj, jpk, zFe3, zFeL1, zTL1, ztotlig, precip ) 
    8485      zFe3 (:,:,:) = 0. 
    8586      zFeL1(:,:,:) = 0. 
    8687      zTL1 (:,:,:) = 0. 
    8788      IF( ln_fechem ) THEN 
    88          CALL wrk_alloc( jpi,jpj,jpk,   zFe2, zFeL2, zTL2, zFeP ) 
     89         CALL wrk_alloc( jpi, jpj,      zstrn, zstrn2 ) 
     90         CALL wrk_alloc( jpi, jpj, jpk, zFe2, zFeL2, zTL2, zFeP ) 
    8991         zFe2 (:,:,:) = 0. 
    9092         zFeL2(:,:,:) = 0. 
     
    100102         ztotlig(:,:,:) =  MIN( ztotlig(:,:,:), 10. ) 
    101103      ELSE 
    102          ztotlig(:,:,:) = ligand * 1E9 
     104        IF( ln_ligand ) THEN  ;   ztotlig(:,:,:) = trb(:,:,:,jplgw) * 1E9 
     105        ELSE                  ;   ztotlig(:,:,:) = ligand * 1E9 
     106        ENDIF 
    103107      ENDIF 
    104108 
    105109      IF( ln_fechem ) THEN 
     110         ! compute the day length depending on latitude and the day 
     111         zrum = REAL( nday_year - 80, wp ) / REAL( nyear_len(1), wp ) 
     112         zcodel = ASIN(  SIN( zrum * rpi * 2._wp ) * SIN( rad * 23.5_wp )  ) 
     113 
     114         ! day length in hours 
     115         zstrn(:,:) = 0. 
     116         DO jj = 1, jpj 
     117            DO ji = 1, jpi 
     118               zargu = TAN( zcodel ) * TAN( gphit(ji,jj) * rad ) 
     119               zargu = MAX( -1., MIN(  1., zargu ) ) 
     120               zstrn(ji,jj) = MAX( 0.0, 24. - 2. * ACOS( zargu ) / rad / 15. ) 
     121            END DO 
     122         END DO 
     123 
     124         ! Maximum light intensity 
     125         zstrn2(:,:) = zstrn(:,:) / 24. 
     126         WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24. 
     127         zstrn(:,:) = 24. / zstrn(:,:) 
     128 
    106129         ! ------------------------------------------------------------ 
    107130         ! NEW FE CHEMISTRY ROUTINE from Tagliabue and Volker (2009) 
     
    109132         ! Chemistry is supposed to be fast enough to be at equilibrium 
    110133         ! ------------------------------------------------------------ 
    111          DO jk = 1, jpkm1 
     134         DO jn = 1, 2 
     135          DO jk = 1, jpkm1 
    112136            DO jj = 1, jpj 
    113137               DO ji = 1, jpi 
     138                  zlight = etot(ji,jj,jk) * zstrn(ji,jj) * REAL( 2-jn, wp ) 
     139                  zzstrn2 = zstrn2(ji,jj) * REAL( 2-jn, wp ) + (1. - zstrn2(ji,jj) ) * REAL( jn-1, wp ) 
    114140                  ! Calculate ligand concentrations : assume 2/3rd of excess goes to 
    115141                  ! strong ligands (L1) and 1/3rd to weak ligands (L2) 
     
    118144                  zTL2(ji,jj,jk) = ligand * 1E9 - 0.000001 + 0.33 * ztligand 
    119145                  ! ionic strength from Millero et al. 1987 
    120                   zionic = 19.9201 * tsn(ji,jj,jk,jp_sal) / ( 1000. - 1.00488 * tsn(ji,jj,jk,jp_sal) + rtrn ) 
    121146                  zph    = -LOG10( MAX( hi(ji,jj,jk), rtrn) ) 
    122                   zoxy   = trb(ji,jj,jk,jpoxy) * ( rhop(ji,jj,jk) / 1.e3 ) 
     147                  zoxy   = trb(ji,jj,jk,jpoxy) 
    123148                  ! Fe2+ oxydation rate from Santana-Casiano et al. (2005) 
    124                   zkox   = 35.407 - 6.7109 * zph + 0.5342 * zph * zph - 5362.6 / ( tsn(ji,jj,jk,jp_tem) + 273.15 )  & 
    125                     &    - 0.04406 * SQRT( tsn(ji,jj,jk,jp_sal) ) - 0.002847 * tsn(ji,jj,jk,jp_sal) 
     149                  zkox   = 35.407 - 6.7109 * zph + 0.5342 * zph * zph - 5362.6 / ( tempis(ji,jj,jk) + 273.15 )  & 
     150                    &    - 0.04406 * SQRT( salinprac(ji,jj,jk) ) - 0.002847 * salinprac(ji,jj,jk) 
    126151                  zkox   = ( 10.** zkox ) * spd 
    127152                  zkox   = zkox * MAX( 1.e-6, zoxy) / ( chemo2(ji,jj,jk) + rtrn ) 
    128153                  ! PHOTOREDUCTION of complexed iron : Tagliabue and Arrigo (2006) 
    129                   zkph2 = MAX( 0., 15. * etot(ji,jj,jk) / ( etot(ji,jj,jk) + 2. ) ) 
     154                  zkph2 = MAX( 0., 15. * zlight / ( zlight + 2. ) ) * (1. - fr_i(ji,jj)) 
    130155                  zkph1 = zkph2 / 5. 
    131156                  ! pass the dfe concentration from PISCES 
     
    167192                        zphi = ACOS( zfff ) 
    168193                        DO jic = 1, 3 
    169                            zfunc = -2 * zr * COS( zphi / 3. + 2. * FLOAT( jic - 1 ) * rpi / 3. ) - za2 / 3. 
     194                           zfunc = -2 * zr * COS( zphi / 3. + 2. * REAL( jic - 1, wp ) * rpi / 3. ) - za2 / 3. 
    170195                           IF( zfunc > 0. .AND. zfunc <= ztfe)  zxs = zfunc 
    171196                        END DO 
     
    173198                  ENDIF 
    174199                  ! solve for the other Fe species 
    175                   zFe3(ji,jj,jk) = MAX( 0., zxs )  
    176                   zFep(ji,jj,jk) = MAX( 0., ( ks * zFe3(ji,jj,jk) / kpr ) ) 
     200                  zzFe3 = MAX( 0., zxs ) 
     201                  zzFep = MAX( 0., ( ks * zzFe3 / kpr ) ) 
    177202                  zkappa2 = ( kb2 + zkph2 ) / kl2 
    178                   zFeL2(ji,jj,jk) = MAX( 0., ( zFe3(ji,jj,jk) * zTL2(ji,jj,jk) ) / ( zkappa2 + zFe3(ji,jj,jk) ) ) 
    179                   zFeL1(ji,jj,jk) = MAX( 0., ( ztfe / zb - za / zb * zFe3(ji,jj,jk) - zc / zb * zFeL2(ji,jj,jk) ) ) 
    180                   zFe2 (ji,jj,jk) = MAX( 0., ( ( zkph1 * zFeL1(ji,jj,jk) + zkph2 * zFeL2(ji,jj,jk) ) / zkox ) ) 
     203                  zzFeL2 = MAX( 0., ( zzFe3 * zTL2(ji,jj,jk) ) / ( zkappa2 + zzFe3 ) ) 
     204                  zzFeL1 = MAX( 0., ( ztfe / zb - za / zb * zzFe3 - zc / zb * zzFeL2 ) ) 
     205                  zzFe2  = MAX( 0., ( ( zkph1 * zzFeL1 + zkph2 * zzFeL2 ) / zkox ) ) 
     206                  zFe3(ji,jj,jk)  = zFe3(ji,jj,jk)  + zzFe3 * zzstrn2 
     207                  zFe2(ji,jj,jk)  = zFe2(ji,jj,jk)  + zzFe2 * zzstrn2 
     208                  zFeL2(ji,jj,jk) = zFeL2(ji,jj,jk) + zzFeL2 * zzstrn2 
     209                  zFeL1(ji,jj,jk) = zFeL1(ji,jj,jk) + zzFeL1 * zzstrn2 
     210                  zFeP(ji,jj,jk)  = zFeP(ji,jj,jk)  + zzFeP * zzstrn2 
    181211               END DO 
    182212            END DO 
     213         END DO 
    183214         END DO 
    184215      ELSE 
     
    206237         ! 
    207238      ENDIF 
    208       ! 
     239 
    209240      zdust = 0.         ! if no dust available 
    210       ! 
    211241      DO jk = 1, jpkm1 
    212242         DO jj = 1, jpj 
    213243            DO ji = 1, jpi 
    214                zstep = xstep 
    215 # if defined key_degrad 
    216                zstep = zstep * facvol(ji,jj,jk) 
    217 # endif 
    218244               ! Scavenging rate of iron. This scavenging rate depends on the load of particles of sea water.  
    219245               ! This parameterization assumes a simple second order kinetics (k[Particles][Fe]). 
     
    224250                  zfecoll = ( 0.3 * zFeL1(ji,jj,jk) + 0.5 * zFeL2(ji,jj,jk) ) * 1E-9 
    225251               ELSE 
    226                   zfeequi = zFe3(ji,jj,jk) * 1E-9  
    227                   zfecoll = 0.5 * zFeL1(ji,jj,jk) * 1E-9 
     252                  zfeequi = zFe3(ji,jj,jk) * 1E-9 
     253                  IF (ln_fecolloid) THEN 
     254                     zhplus   = max( rtrn, hi(ji,jj,jk) ) 
     255                     fe3sol  = fesol(ji,jj,jk,1) * ( zhplus**3 + fesol(ji,jj,jk,2) * zhplus**2  & 
     256                     &         + fesol(ji,jj,jk,3) * zhplus + fesol(ji,jj,jk,4)     & 
     257                     &         + fesol(ji,jj,jk,5) / zhplus ) 
     258                     zfecoll = max( ( 0.1 * zFeL1(ji,jj,jk) * 1E-9 ), ( zFeL1(ji,jj,jk) * 1E-9 -fe3sol ) ) 
     259                  ELSE 
     260                     zfecoll = 0.5 * zFeL1(ji,jj,jk) * 1E-9 
     261                     fe3sol  = 0. 
     262                  ENDIF 
    228263               ENDIF 
    229 #if defined key_kriest 
    230                ztrc   = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6  
    231 #else 
     264               ! 
    232265               ztrc   = ( trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + trb(ji,jj,jk,jpcal) + trb(ji,jj,jk,jpgsi) ) * 1.e6  
    233 #endif 
    234266               IF( ln_dust )  zdust  = dust(ji,jj) / ( wdust / rday ) * tmask(ji,jj,jk) ! dust in kg/m2/s 
    235267               zlam1b = 3.e-5 + xlamdust * zdust + xlam1 * ztrc 
    236                zscave = zfeequi * zlam1b * zstep 
     268               zscave = zfeequi * zlam1b * xstep 
    237269 
    238270               ! Compute the different ratios for scavenging of iron 
     
    240272               ! --------------------------------------------------------- 
    241273               zdenom1 = xlam1 * trb(ji,jj,jk,jppoc) / zlam1b 
    242 #if ! defined key_kriest 
    243274               zdenom2 = xlam1 * trb(ji,jj,jk,jpgoc) / zlam1b 
    244 #endif 
    245275 
    246276               !  Increased scavenging for very high iron concentrations found near the coasts  
     
    249279               zlamfac = MAX( 0.e0, ( gphit(ji,jj) + 55.) / 30. ) 
    250280               zlamfac = MIN( 1.  , zlamfac ) 
    251 !!gm very small BUG :  it is unlikely but possible that gdept_n = 0  ..... 
    252281               zdep    = MIN( 1., 1000. / gdept_n(ji,jj,jk) ) 
    253282               zlam1b  = xlam1 * MAX( 0.e0, ( trb(ji,jj,jk,jpfer) * 1.e9 - ztotlig(ji,jj,jk) ) ) 
    254                zcoag   = zfeequi * zlam1b * zstep + 1E-4 * ( 1. - zlamfac ) * zdep * zstep * trb(ji,jj,jk,jpfer) 
     283               zcoag   = zfeequi * zlam1b * xstep + 1E-4 * ( 1. - zlamfac ) * zdep * xstep * trb(ji,jj,jk,jpfer) 
    255284 
    256285               !  Compute the coagulation of colloidal iron. This parameterization  
     
    259288               !  ---------------------------------------------------------------- 
    260289               zlam1a  = ( 0.369  * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4  * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk)    & 
    261                    &   + ( 114.   * 0.3 * trb(ji,jj,jk,jpdoc) + 5.09E3 * trb(ji,jj,jk,jppoc) ) 
    262                zaggdfea = zlam1a * zstep * zfecoll 
    263 #if defined key_kriest 
    264                zaggdfeb = 0. 
     290                   &   + ( 114.   * 0.3 * trb(ji,jj,jk,jpdoc) ) 
     291               zaggdfea = zlam1a * xstep * zfecoll 
    265292               ! 
    266                tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zscave - zaggdfea - zaggdfeb - zcoag 
    267                tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea + zaggdfeb 
    268 #else 
    269293               zlam1b = 3.53E3 *   trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 
    270                zaggdfeb = zlam1b * zstep * zfecoll 
     294               zaggdfeb = zlam1b * xstep * zfecoll 
    271295               ! 
    272                tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zscave - zaggdfea - zaggdfeb - zcoag 
     296               ! precipitation of Fe3+, creation of nanoparticles 
     297               precip(ji,jj,jk) = MAX( 0., ( zfeequi - fe3sol ) ) * kfep * xstep 
     298               ! 
     299               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zscave - zaggdfea - zaggdfeb & 
     300               &                     - zcoag - precip(ji,jj,jk) 
    273301               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zscave * zdenom1 + zaggdfea 
    274302               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zscave * zdenom2 + zaggdfeb 
    275 #endif 
     303               ! 
    276304            END DO 
    277305         END DO 
     
    280308      !  Define the bioavailable fraction of iron 
    281309      !  ---------------------------------------- 
    282       IF( ln_fechem ) THEN 
    283           biron(:,:,:) = MAX( 0., trb(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 ) 
    284       ELSE 
    285           biron(:,:,:) = trb(:,:,:,jpfer)  
    286       ENDIF 
    287  
     310      IF( ln_fechem ) THEN  ;  biron(:,:,:) = MAX( 0., trb(:,:,:,jpfer) - zFeP(:,:,:) * 1E-9 ) 
     311      ELSE                  ;  biron(:,:,:) = trb(:,:,:,jpfer)  
     312      ENDIF 
     313      ! 
     314      IF( ln_ligand ) THEN 
     315         ! 
     316         DO jk = 1, jpkm1 
     317            DO jj = 1, jpj 
     318               DO ji = 1, jpi 
     319                  zlam1a   = ( 0.369  * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4  * trb(ji,jj,jk,jppoc) ) * xdiss(ji,jj,jk)    & 
     320                      &    + ( 114.   * 0.3 * trb(ji,jj,jk,jpdoc) ) 
     321                  ! 
     322                  zlam1b   = 3.53E3 *   trb(ji,jj,jk,jpgoc) * xdiss(ji,jj,jk) 
     323                  zligco   = MAX( ( 0.1 * trb(ji,jj,jk,jplgw) ), ( trb(ji,jj,jk,jplgw) - fe3sol ) ) 
     324                  zaggliga = zlam1a * xstep * zligco 
     325                  zaggligb = zlam1b * xstep * zligco 
     326                  tra(ji,jj,jk,jpfep) = tra(ji,jj,jk,jpfep) + precip(ji,jj,jk) 
     327                  tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) - zaggliga - zaggligb 
     328               END DO 
     329            END DO 
     330         END DO 
     331         ! 
     332         IF( .NOT.ln_fechem) THEN 
     333            plig(:,:,:) =  MAX( 0., ( ( zFeL1(:,:,:) * 1E-9 ) / ( trb(:,:,:,jpfer) +rtrn ) ) ) 
     334            plig(:,:,:) =  MAX( 0. , plig(:,:,:) ) 
     335         ENDIF 
     336         ! 
     337      ENDIF 
    288338      !  Output of some diagnostics variables 
    289339      !     --------------------------------- 
    290       IF( lk_iomput .AND. knt == nrdttrc ) THEN 
     340      IF( lk_iomput ) THEN 
     341         IF( knt == nrdttrc ) THEN 
    291342         IF( iom_use("Fe3")    )  CALL iom_put("Fe3"    , zFe3   (:,:,:)       * tmask(:,:,:) )   ! Fe3+ 
    292343         IF( iom_use("FeL1")   )  CALL iom_put("FeL1"   , zFeL1  (:,:,:)       * tmask(:,:,:) )   ! FeL1 
     
    300351            IF( iom_use("TL2")  ) CALL iom_put("TL2"    , zTL2   (:,:,:)       * tmask(:,:,:) )   ! TL2 
    301352         ENDIF 
     353         ENDIF 
    302354      ENDIF 
    303355 
     
    308360      ENDIF 
    309361      ! 
    310                        CALL wrk_dealloc( jpi, jpj, jpk, zFe3, zFeL1, zTL1, ztotlig ) 
    311       IF( ln_fechem )  CALL wrk_dealloc( jpi, jpj, jpk, zFe2, zFeL2, zTL2, zFeP ) 
     362      CALL wrk_dealloc( jpi, jpj, jpk, zFe3, zFeL1, zTL1, ztotlig, precip ) 
     363      IF( ln_fechem )  THEN 
     364         CALL wrk_dealloc( jpi, jpj,      zstrn, zstrn2 ) 
     365         CALL wrk_dealloc( jpi, jpj, jpk, zFe2, zFeL2, zTL2, zFeP ) 
     366      ENDIF 
    312367      ! 
    313368      IF( nn_timing == 1 )  CALL timing_stop('p4z_fechem') 
     
    328383      !! 
    329384      !!---------------------------------------------------------------------- 
    330       NAMELIST/nampisfer/ ln_fechem, ln_ligvar, xlam1, xlamdust, ligand  
     385      NAMELIST/nampisfer/ ln_fechem, ln_ligvar, ln_fecolloid, xlam1, xlamdust, ligand, kfep  
    331386      INTEGER :: ios                 ! Local integer output status for namelist read 
    332387 
     
    344399         WRITE(numout,*) ' Namelist parameters for Iron chemistry, nampisfer' 
    345400         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
    346          WRITE(numout,*) '    enable complex iron chemistry scheme      ln_fechem =', ln_fechem 
    347          WRITE(numout,*) '    variable concentration of ligand          ln_ligvar =', ln_ligvar 
    348          WRITE(numout,*) '    scavenging rate of Iron                   xlam1     =', xlam1 
    349          WRITE(numout,*) '    scavenging rate of Iron by dust           xlamdust  =', xlamdust 
    350          WRITE(numout,*) '    ligand concentration in the ocean         ligand    =', ligand 
     401         WRITE(numout,*) '    enable complex iron chemistry scheme      ln_fechem    =', ln_fechem 
     402         WRITE(numout,*) '    variable concentration of ligand          ln_ligvar    =', ln_ligvar 
     403         WRITE(numout,*) '    Variable colloidal fraction of Fe3+       ln_fecolloid =', ln_fecolloid 
     404         WRITE(numout,*) '    scavenging rate of Iron                   xlam1        =', xlam1 
     405         WRITE(numout,*) '    scavenging rate of Iron by dust           xlamdust     =', xlamdust 
     406         WRITE(numout,*) '    ligand concentration in the ocean         ligand       =', ligand 
     407         WRITE(numout,*) '    rate constant for nanoparticle formation  kfep         =', kfep 
    351408      ENDIF 
    352409      ! 
     
    377434      ! 
    378435   END SUBROUTINE p4z_fechem_init 
    379  
    380 #else 
    381    !!====================================================================== 
    382    !!  Dummy module :                                   No PISCES bio-model 
    383    !!====================================================================== 
    384 CONTAINS 
    385    SUBROUTINE p4z_fechem                    ! Empty routine 
    386    END SUBROUTINE p4z_fechem 
    387 #endif  
    388  
    389436   !!====================================================================== 
    390437END MODULE p4zfechem 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zflx.F90

    r6962 r7403  
    1111   !!                  !  2011-02  (J. Simeon, J. Orr) Include total atm P correction  
    1212   !!---------------------------------------------------------------------- 
    13 #if defined key_pisces 
    14    !!---------------------------------------------------------------------- 
    15    !!   'key_pisces'                                       PISCES bio-model 
    16    !!---------------------------------------------------------------------- 
    1713   !!   p4z_flx       :   CALCULATES GAS EXCHANGE AND CHEMISTRY AT SEA SURFACE 
    1814   !!   p4z_flx_init  :   Read the namelist 
     
    2622   USE iom                          !  I/O manager 
    2723   USE fldread                      !  read input fields 
    28 #if defined key_cpl_carbon_cycle 
    29    USE sbc_oce, ONLY :  atm_co2     !  atmospheric pCO2                
    30 #endif 
    3124 
    3225   IMPLICIT NONE 
     
    4841 
    4942   !                               !!* nampisatm namelist (Atmospheric PRessure) * 
    50    LOGICAL, PUBLIC ::   ln_presatm  !: ref. pressure: global mean Patm (F) or a constant (F) 
    51  
    52    REAL(wp) , ALLOCATABLE, SAVE, DIMENSION(:,:)  ::  patm      ! atmospheric pressure at kt                 [N/m2] 
    53    TYPE(FLD), ALLOCATABLE,       DIMENSION(:)    ::  sf_patm   ! structure of input fields (file informations, fields read) 
    54  
    55  
    56    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: oce_co2   !: ocean carbon flux  
     43   LOGICAL, PUBLIC ::   ln_presatm     !: ref. pressure: global mean Patm (F) or a constant (F) 
     44   LOGICAL, PUBLIC ::   ln_presatmco2  !: accounting for spatial atm CO2 in the compuation of carbon flux (T) or not (F) 
     45 
     46   REAL(wp) , ALLOCATABLE, SAVE, DIMENSION(:,:) ::  patm      ! atmospheric pressure at kt                 [N/m2] 
     47   TYPE(FLD), ALLOCATABLE,       DIMENSION(:)   ::  sf_patm   ! structure of input fields (file informations, fields read) 
     48   TYPE(FLD), ALLOCATABLE,       DIMENSION(:)   ::  sf_atmco2 ! structure of input fields (file informations, fields read) 
     49 
    5750   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: satmco2   !: atmospheric pco2  
    5851 
     
    7467      !! ** Method  :  
    7568      !!              - Include total atm P correction via Esbensen & Kushnir (1981)  
    76       !!              - Pressure correction NOT done for key_cpl_carbon_cycle 
    7769      !!              - Remove Wanninkhof chemical enhancement; 
    7870      !!              - Add option for time-interpolation of atcco2.txt   
     
    8577      REAL(wp) ::   zfld, zflu, zfld16, zflu16, zfact 
    8678      REAL(wp) ::   zvapsw, zsal, zfco2, zxc2, xCO2approx, ztkel, zfugcoeff 
    87       REAL(wp) ::   zph, zah2, zbot, zdic, zalk, zsch_o2, zalka, zsch_co2 
     79      REAL(wp) ::   zph, zdic, zsch_o2, zsch_co2 
    8880      REAL(wp) ::   zyr_dec, zdco2dt 
    8981      CHARACTER (len=25) :: charout 
     
    10092      !     IS USED TO COMPUTE AIR-SEA FLUX OF CO2 
    10193 
    102       IF( kt /= nit000 .AND. knt == 1 ) CALL p4z_patm( kt )    ! Get sea-level pressure (E&K [1981] climatology) for use in flux calcs 
    103  
    104       IF( ln_co2int ) THEN  
     94      IF( kt /= nit000 .AND. .NOT.l_co2cpl .AND. knt == 1 ) CALL p4z_patm( kt )    ! Get sea-level pressure (E&K [1981] climatology) for use in flux calcs 
     95 
     96      IF( ln_co2int .AND. .NOT.ln_presatmco2 .AND. .NOT.l_co2cpl ) THEN  
    10597         ! Linear temporal interpolation  of atmospheric pco2.  atcco2.txt has annual values. 
    10698         ! Caveats: First column of .txt must be in years, decimal  years preferably.  
     
    116108      ENDIF 
    117109 
    118 #if defined key_cpl_carbon_cycle 
    119       satmco2(:,:) = atm_co2(:,:) 
    120 #endif 
    121  
    122       DO jm = 1, 10 
    123          DO jj = 1, jpj 
    124             DO ji = 1, jpi 
    125  
    126                ! DUMMY VARIABLES FOR DIC, H+, AND BORATE 
    127                zbot  = borat(ji,jj,1) 
    128                zfact = rhop(ji,jj,1) / 1000. + rtrn 
    129                zdic  = trb(ji,jj,1,jpdic) / zfact 
    130                zph   = MAX( hi(ji,jj,1), 1.e-10 ) / zfact 
    131                zalka = trb(ji,jj,1,jptal) / zfact 
    132  
    133                ! CALCULATE [ALK]([CO3--], [HCO3-]) 
    134                zalk  = zalka - (  akw3(ji,jj,1) / zph - zph / aphscale(ji,jj,1)    & 
    135                &       + zbot / ( 1.+ zph / akb3(ji,jj,1) )  ) 
    136  
    137                ! CALCULATE [H+] AND [H2CO3] 
    138                zah2   = SQRT(  (zdic-zalk)**2 + 4.* ( zalk * ak23(ji,jj,1)   & 
    139                   &                                        / ak13(ji,jj,1) ) * ( 2.* zdic - zalk )  ) 
    140                zah2   = 0.5 * ak13(ji,jj,1) / zalk * ( ( zdic - zalk ) + zah2 ) 
    141                zh2co3(ji,jj) = ( 2.* zdic - zalk ) / ( 2.+ ak13(ji,jj,1) / zah2 ) * zfact 
    142                hi(ji,jj,1)   = zah2 * zfact 
    143             END DO 
     110      IF( l_co2cpl )   satmco2(:,:) = atm_co2(:,:) 
     111 
     112      DO jj = 1, jpj 
     113         DO ji = 1, jpi 
     114            ! DUMMY VARIABLES FOR DIC, H+, AND BORATE 
     115            zfact = rhop(ji,jj,1) / 1000. + rtrn 
     116            zdic  = trb(ji,jj,1,jpdic) 
     117            zph   = MAX( hi(ji,jj,1), 1.e-10 ) / zfact 
     118            ! CALCULATE [H2CO3] 
     119            zh2co3(ji,jj) = zdic/(1. + ak13(ji,jj,1)/zph + ak13(ji,jj,1)*ak23(ji,jj,1)/zph**2) 
    144120         END DO 
    145121      END DO 
    146  
    147122 
    148123      ! -------------- 
     
    167142            zkgwan = 0.251 * zws 
    168143            zkgwan = zkgwan * xconv * ( 1.- fr_i(ji,jj) ) * tmask(ji,jj,1) 
    169 # if defined key_degrad 
    170             zkgwan = zkgwan * facvol(ji,jj,1) 
    171 #endif  
    172144            ! compute gas exchange for CO2 and O2 
    173145            zkgco2(ji,jj) = zkgwan * SQRT( 660./ zsch_co2 ) 
     
    176148      END DO 
    177149 
     150 
    178151      DO jj = 1, jpj 
    179152         DO ji = 1, jpi 
    180             ztkel     = tsn(ji,jj,1,jp_tem) + 273.15 
    181             zsal      = tsn(ji,jj,1,jp_sal) + ( 1.- tmask(ji,jj,1) ) * 35. 
     153            ztkel = tempis(ji,jj,1) + 273.15 
     154            zsal  = salinprac(ji,jj,1) + ( 1.- tmask(ji,jj,1) ) * 35. 
    182155            zvapsw    = EXP(24.4543 - 67.4509*(100.0/ztkel) - 4.8489*LOG(ztkel/100) - 0.000544*zsal) 
    183156            zpco2atm(ji,jj) = satmco2(ji,jj) * ( patm(ji,jj) - zvapsw ) 
     
    232205         ENDIF 
    233206         IF( iom_use( "Dpo2" ) )  THEN 
    234            zw2d(:,:) = ( atcox * patm(:,:) - atcox * trn(:,:,1,jpoxy) / ( chemo2(:,:,1) + rtrn ) ) * tmask(:,:,1) 
     207           zw2d(:,:) = ( atcox * patm(:,:) - atcox * trb(:,:,1,jpoxy) / ( chemo2(:,:,1) + rtrn ) ) * tmask(:,:,1) 
    235208           CALL iom_put( "Dpo2"  , zw2d ) 
    236209         ENDIF 
     
    239212         ! 
    240213         CALL wrk_dealloc( jpi, jpj, zw2d ) 
    241       ELSE 
    242          IF( ln_diatrc ) THEN 
    243             trc2d(:,:,jp_pcs0_2d    ) = oce_co2(:,:) / e1e2t(:,:) * rfact2r  
    244             trc2d(:,:,jp_pcs0_2d + 1) = zoflx(:,:) * 1000 * tmask(:,:,1)  
    245             trc2d(:,:,jp_pcs0_2d + 2) = zkgco2(:,:) * tmask(:,:,1)  
    246             trc2d(:,:,jp_pcs0_2d + 3) = ( zpco2atm(:,:) - zh2co3(:,:) / ( chemc(:,:,1) + rtrn ) ) * tmask(:,:,1)  
    247          ENDIF 
    248214      ENDIF 
    249215      ! 
     
    287253         WRITE(numout,*) ' ' 
    288254      ENDIF 
    289       IF( .NOT.ln_co2int ) THEN 
     255     IF( .NOT.ln_co2int .AND. .NOT.ln_presatmco2 ) THEN 
    290256         IF(lwp) THEN                         ! control print 
    291257            WRITE(numout,*) '    Constant Atmospheric pCO2 value  atcco2    =', atcco2 
     
    293259         ENDIF 
    294260         satmco2(:,:)  = atcco2      ! Initialisation of atmospheric pco2 
    295       ELSE 
     261      ELSEIF( ln_co2int .AND. .NOT.ln_presatmco2 ) THEN 
    296262         IF(lwp)  THEN 
    297263            WRITE(numout,*) '    Atmospheric pCO2 value  from file clname      =', TRIM( clname ) 
     
    315281         END DO 
    316282         CLOSE(numco2) 
    317       ENDIF 
     283      ELSEIF( .NOT.ln_co2int .AND. ln_presatmco2 ) THEN 
     284         IF(lwp)  THEN 
     285            WRITE(numout,*) '    Spatialized Atmospheric pCO2 from an external file' 
     286            WRITE(numout,*) ' ' 
     287         ENDIF 
     288      ELSE 
     289         IF(lwp)  THEN 
     290            WRITE(numout,*) '    Spatialized Atmospheric pCO2 from an external file' 
     291            WRITE(numout,*) ' ' 
     292         ENDIF 
     293      ENDIF 
     294 
    318295      ! 
    319296      oce_co2(:,:)  = 0._wp                ! Initialization of Flux of Carbon 
     
    341318      CHARACTER(len=100) ::  cn_dir   ! Root directory for location of ssr files 
    342319      TYPE(FLD_N)        ::  sn_patm  ! informations about the fields to be read 
    343       !! 
    344       NAMELIST/nampisatm/ ln_presatm, sn_patm, cn_dir 
     320      TYPE(FLD_N)        ::  sn_atmco2 ! informations about the fields to be read 
     321      !! 
     322      NAMELIST/nampisatm/ ln_presatm, ln_presatmco2, sn_patm, sn_atmco2, cn_dir 
    345323 
    346324      !                                         ! ----------------------- ! 
     
    361339            WRITE(numout,*) '   Namelist nampisatm : Atmospheric Pressure as external forcing' 
    362340            WRITE(numout,*) '      constant atmopsheric pressure (F) or from a file (T)  ln_presatm = ', ln_presatm 
     341            WRITE(numout,*) '      spatial atmopsheric CO2 for flux calcs  ln_presatmco2 = ', ln_presatmco2 
    363342            WRITE(numout,*) 
    364343         ENDIF 
     
    373352         ENDIF 
    374353         !                                          
     354         IF( ln_presatmco2 ) THEN 
     355            ALLOCATE( sf_atmco2(1), STAT=ierr )           !* allocate and fill sf_atmco2 (forcing structure) with sn_atmco2 
     356            IF( ierr > 0 )   CALL ctl_stop( 'STOP', 'p4z_flx: unable to allocate sf_atmco2 structure' ) 
     357            ! 
     358            CALL fld_fill( sf_atmco2, (/ sn_atmco2 /), cn_dir, 'p4z_flx', 'Atmospheric co2 partial pressure ', 'nampisatm' ) 
     359                                   ALLOCATE( sf_atmco2(1)%fnow(jpi,jpj,1)   ) 
     360            IF( sn_atmco2%ln_tint )  ALLOCATE( sf_atmco2(1)%fdta(jpi,jpj,1,2) ) 
     361         ENDIF 
     362         ! 
    375363         IF( .NOT.ln_presatm )   patm(:,:) = 1.e0    ! Initialize patm if no reading from a file 
    376364         ! 
     
    382370      ENDIF 
    383371      ! 
     372      IF( ln_presatmco2 ) THEN 
     373         CALL fld_read( kt, 1, sf_atmco2 )               !* input atmco2 provided at kt + 1/2 
     374         satmco2(:,:) = sf_atmco2(1)%fnow(:,:,1)                        ! atmospheric pressure 
     375      ELSE 
     376         satmco2(:,:) = atcco2    ! Initialize atmco2 if no reading from a file 
     377      ENDIF 
     378      ! 
    384379   END SUBROUTINE p4z_patm 
    385380 
     381 
    386382   INTEGER FUNCTION p4z_flx_alloc() 
    387383      !!---------------------------------------------------------------------- 
    388384      !!                     ***  ROUTINE p4z_flx_alloc  *** 
    389385      !!---------------------------------------------------------------------- 
    390       ALLOCATE( oce_co2(jpi,jpj), satmco2(jpi,jpj), patm(jpi,jpj), STAT=p4z_flx_alloc ) 
     386      ALLOCATE( satmco2(jpi,jpj), patm(jpi,jpj), STAT=p4z_flx_alloc ) 
    391387      ! 
    392388      IF( p4z_flx_alloc /= 0 )   CALL ctl_warn('p4z_flx_alloc : failed to allocate arrays') 
    393389      ! 
    394390   END FUNCTION p4z_flx_alloc 
    395  
    396 #else 
    397    !!====================================================================== 
    398    !!  Dummy module :                                   No PISCES bio-model 
    399    !!====================================================================== 
    400 CONTAINS 
    401    SUBROUTINE p4z_flx( kt )                   ! Empty routine 
    402       INTEGER, INTENT( in ) ::   kt 
    403       WRITE(*,*) 'p4z_flx: You should not have seen this print! error?', kt 
    404    END SUBROUTINE p4z_flx 
    405 #endif  
    406391 
    407392   !!====================================================================== 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zint.F90

    r5656 r7403  
    77   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90 
    88   !!---------------------------------------------------------------------- 
    9 #if defined key_pisces 
    10    !!---------------------------------------------------------------------- 
    11    !!   'key_pisces'                                       PISCES bio-model 
    12    !!---------------------------------------------------------------------- 
    139   !!   p4z_int        :  interpolation and computation of various accessory fields 
    1410   !!---------------------------------------------------------------------- 
     
    1612   USE trc             !  passive tracers common variables  
    1713   USE sms_pisces      !  PISCES Source Minus Sink variables 
    18    USE iom 
    1914 
    2015   IMPLICIT NONE 
     
    7065   END SUBROUTINE p4z_int 
    7166 
    72 #else 
    73    !!====================================================================== 
    74    !!  Dummy module :                                   No PISCES bio-model 
    75    !!====================================================================== 
    76 CONTAINS 
    77    SUBROUTINE p4z_int                   ! Empty routine 
    78       WRITE(*,*) 'p4z_int: You should not have seen this print! error?' 
    79    END SUBROUTINE p4z_int 
    80 #endif  
    81  
    8267   !!====================================================================== 
    8368END MODULE p4zint 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlim.F90

    r6945 r7403  
    88   !!             3.4  !  2011-04  (O. Aumont, C. Ethe) Limitation for iron modelled in quota  
    99   !!---------------------------------------------------------------------- 
    10 #if defined key_pisces 
    11    !!---------------------------------------------------------------------- 
    12    !!   'key_pisces'                                       PISCES bio-model 
    13    !!---------------------------------------------------------------------- 
    1410   !!   p4z_lim        :   Compute the nutrients limitation terms  
    1511   !!   p4z_lim_init   :   Read the namelist  
     
    1814   USE trc             ! Tracers defined 
    1915   USE sms_pisces      ! PISCES variables 
    20    USE p4zopt          ! Optical 
    2116   USE iom             !  I/O manager 
    2217 
     
    2621   PUBLIC p4z_lim     
    2722   PUBLIC p4z_lim_init     
     23   PUBLIC p4z_lim_alloc 
    2824 
    2925   !! * Shared module variables 
     
    4844   REAL(wp), PUBLIC ::  qdfelim     !:  optimal Fe quota for diatoms 
    4945   REAL(wp), PUBLIC ::  caco3r      !:  mean rainratio  
     46 
     47   !!* Phytoplankton limitation terms 
     48   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanono3   !: ??? 
     49   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatno3   !: ??? 
     50   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanonh4   !: ??? 
     51   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatnh4   !: ??? 
     52   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanopo4   !: ??? 
     53   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatpo4   !: ??? 
     54   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimphy    !: ??? 
     55   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdia    !: ??? 
     56   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimnfe    !: ??? 
     57   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdfe    !: ??? 
     58   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimsi     !: ??? 
     59   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimbac    !: ?? 
     60   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimbacl   !: ?? 
     61   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   concdfe    !: ??? 
     62   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   concnfe    !: ??? 
    5063 
    5164   ! Coefficient for iron limitation 
     
    224237      !!---------------------------------------------------------------------- 
    225238 
    226       NAMELIST/nampislim/ concnno3, concdno3, concnnh4, concdnh4, concnfer, concdfer, concbfe,   & 
     239      NAMELIST/namp4zlim/ concnno3, concdno3, concnnh4, concdnh4, concnfer, concdfer, concbfe,   & 
    227240         &                concbno3, concbnh4, xsizedia, xsizephy, xsizern, xsizerd,          &  
    228241         &                xksi1, xksi2, xkdoc, qnfelim, qdfelim, caco3r, oxymin 
     
    230243 
    231244      REWIND( numnatp_ref )              ! Namelist nampislim in reference namelist : Pisces nutrient limitation parameters 
    232       READ  ( numnatp_ref, nampislim, IOSTAT = ios, ERR = 901) 
    233 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampislim in reference namelist', lwp ) 
     245      READ  ( numnatp_ref, namp4zlim, IOSTAT = ios, ERR = 901) 
     246901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zlim in reference namelist', lwp ) 
    234247 
    235248      REWIND( numnatp_cfg )              ! Namelist nampislim in configuration namelist : Pisces nutrient limitation parameters  
    236       READ  ( numnatp_cfg, nampislim, IOSTAT = ios, ERR = 902 ) 
    237 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampislim in configuration namelist', lwp ) 
    238       IF(lwm) WRITE ( numonp, nampislim ) 
     249      READ  ( numnatp_cfg, namp4zlim, IOSTAT = ios, ERR = 902 ) 
     250902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zlim in configuration namelist', lwp ) 
     251      IF(lwm) WRITE ( numonp, namp4zlim ) 
    239252 
    240253      IF(lwp) THEN                         ! control print 
    241254         WRITE(numout,*) ' ' 
    242          WRITE(numout,*) ' Namelist parameters for nutrient limitations, nampislim' 
     255         WRITE(numout,*) ' Namelist parameters for nutrient limitations, namp4zlim' 
    243256         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
    244257         WRITE(numout,*) '    mean rainratio                           caco3r    = ', caco3r 
     
    268281   END SUBROUTINE p4z_lim_init 
    269282 
    270 #else 
    271    !!====================================================================== 
    272    !!  Dummy module :                                   No PISCES bio-model 
    273    !!====================================================================== 
    274 CONTAINS 
    275    SUBROUTINE p4z_lim                   ! Empty routine 
    276    END SUBROUTINE p4z_lim 
    277 #endif  
     283   INTEGER FUNCTION p4z_lim_alloc() 
     284      !!---------------------------------------------------------------------- 
     285      !!                     ***  ROUTINE p5z_lim_alloc  *** 
     286      !!---------------------------------------------------------------------- 
     287      USE lib_mpp , ONLY: ctl_warn 
     288      !!---------------------------------------------------------------------- 
     289 
     290      !*  Biological arrays for phytoplankton growth 
     291      ALLOCATE( xnanono3(jpi,jpj,jpk), xdiatno3(jpi,jpj,jpk),       & 
     292         &      xnanonh4(jpi,jpj,jpk), xdiatnh4(jpi,jpj,jpk),       & 
     293         &      xnanopo4(jpi,jpj,jpk), xdiatpo4(jpi,jpj,jpk),       & 
     294         &      xlimphy (jpi,jpj,jpk), xlimdia (jpi,jpj,jpk),       & 
     295         &      xlimnfe (jpi,jpj,jpk), xlimdfe (jpi,jpj,jpk),       & 
     296         &      xlimbac (jpi,jpj,jpk), xlimbacl(jpi,jpj,jpk),       & 
     297         &      concnfe (jpi,jpj,jpk), concdfe (jpi,jpj,jpk),       & 
     298         &      xlimsi  (jpi,jpj,jpk), STAT=p4z_lim_alloc ) 
     299      ! 
     300      IF( p4z_lim_alloc /= 0 ) CALL ctl_warn('p4z_lim_alloc : failed to allocate arrays.') 
     301      ! 
     302   END FUNCTION p4z_lim_alloc 
    278303 
    279304   !!====================================================================== 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90

    r6945 r7403  
    1111   !!                  !  2011-02  (J. Simeon, J. Orr)  Calcon salinity dependence 
    1212   !!             3.4  !  2011-06  (O. Aumont, C. Ethe) Improvment of calcite dissolution 
    13    !!---------------------------------------------------------------------- 
    14 #if defined key_pisces 
    15    !!---------------------------------------------------------------------- 
    16    !!   'key_pisces'                                       PISCES bio-model 
     13   !!             3.6  !  2015-05  (O. Aumont) PISCES quota 
    1714   !!---------------------------------------------------------------------- 
    1815   !!   p4z_lys        :   Compute the CaCO3 dissolution  
     
    2219   USE trc             !  passive tracers common variables  
    2320   USE sms_pisces      !  PISCES Source Minus Sink variables 
     21   USE p4zche          !  Chemical model 
    2422   USE prtctl_trc      !  print control for debugging 
    2523   USE iom             !  I/O manager 
     
    6159      INTEGER, INTENT(in) ::   kt, knt ! ocean time step 
    6260      INTEGER  ::   ji, jj, jk, jn 
    63       REAL(wp) ::   zalk, zdic, zph, zah2 
    64       REAL(wp) ::   zdispot, zfact, zcalcon, zalka, zaldi 
     61      REAL(wp) ::   zdispot, zfact, zcalcon 
    6562      REAL(wp) ::   zomegaca, zexcess, zexcess0 
    6663      CHARACTER (len=25) :: charout 
    67       REAL(wp), POINTER, DIMENSION(:,:,:) :: zco3, zco3sat, zcaldiss    
     64      REAL(wp), POINTER, DIMENSION(:,:,:) :: zco3, zcaldiss, zhinit, zhi, zco3sat 
    6865      !!--------------------------------------------------------------------- 
    6966      ! 
    7067      IF( nn_timing == 1 )  CALL timing_start('p4z_lys') 
    7168      ! 
    72       CALL wrk_alloc( jpi, jpj, jpk, zco3, zco3sat, zcaldiss ) 
     69      CALL wrk_alloc( jpi, jpj, jpk, zco3, zcaldiss, zhinit, zhi, zco3sat ) 
    7370      ! 
    7471      zco3    (:,:,:) = 0. 
    7572      zcaldiss(:,:,:) = 0. 
     73      zhinit(:,:,:)   = hi(:,:,:) * 1000. / ( rhop(:,:,:) + rtrn ) 
    7674      !     ------------------------------------------- 
    7775      !     COMPUTE [CO3--] and [H+] CONCENTRATIONS 
    7876      !     ------------------------------------------- 
    79        
    80       DO jn = 1, 5                               !  BEGIN OF ITERATION 
    81          ! 
    82          DO jk = 1, jpkm1 
    83             DO jj = 1, jpj 
    84                DO ji = 1, jpi 
    85                   zfact = rhop(ji,jj,jk) / 1000. + rtrn 
    86                   zph  = hi(ji,jj,jk) * tmask(ji,jj,jk) / zfact + ( 1.-tmask(ji,jj,jk) ) * 1.e-9 ! [H+] 
    87                   zdic  = trb(ji,jj,jk,jpdic) / zfact 
    88                   zalka = trb(ji,jj,jk,jptal) / zfact 
    89                   ! CALCULATE [ALK]([CO3--], [HCO3-]) 
    90                   zalk  = zalka - ( akw3(ji,jj,jk) / zph - zph / ( aphscale(ji,jj,jk) + rtrn )  & 
    91                   &       + borat(ji,jj,jk) / ( 1. + zph / akb3(ji,jj,jk) ) ) 
    92                   ! CALCULATE [H+] and [CO3--] 
    93                   zaldi = zdic - zalk 
    94                   zah2  = SQRT( zaldi * zaldi + 4.* ( zalk * ak23(ji,jj,jk) / ak13(ji,jj,jk) ) * ( zdic + zaldi ) ) 
    95                   zah2  = 0.5 * ak13(ji,jj,jk) / zalk * ( zaldi + zah2 ) 
    96                   ! 
    97                   zco3(ji,jj,jk) = zalk / ( 2. + zah2 / ak23(ji,jj,jk) ) * zfact 
    98                   hi(ji,jj,jk)   = zah2 * zfact 
    99                END DO 
     77 
     78      CALL solve_at_general(zhinit, zhi) 
     79 
     80      DO jk = 1, jpkm1 
     81         DO jj = 1, jpj 
     82            DO ji = 1, jpi 
     83               zco3(ji,jj,jk) = trb(ji,jj,jk,jpdic) * ak13(ji,jj,jk) * ak23(ji,jj,jk) / (zhi(ji,jj,jk)**2   & 
     84               &                + ak13(ji,jj,jk) * zhi(ji,jj,jk) + ak13(ji,jj,jk) * ak23(ji,jj,jk) + rtrn ) 
     85               hi(ji,jj,jk)   = zhi(ji,jj,jk) * rhop(ji,jj,jk) / 1000. 
    10086            END DO 
    10187         END DO 
    102          ! 
    103       END DO  
     88      END DO 
    10489 
    10590      !     --------------------------------------------------------- 
     
    115100               ! DEVIATION OF [CO3--] FROM SATURATION VALUE 
    116101               ! Salinity dependance in zomegaca and divide by rhop/1000 to have good units 
    117                zcalcon  = calcon * ( tsn(ji,jj,jk,jp_sal) / 35._wp ) 
     102               zcalcon  = calcon * ( salinprac(ji,jj,jk) / 35._wp ) 
    118103               zfact    = rhop(ji,jj,jk) / 1000._wp 
    119104               zomegaca = ( zcalcon * zco3(ji,jj,jk) ) / ( aksp(ji,jj,jk) * zfact + rtrn ) 
     
    129114               !       CACO3 GETS DISSOLVED EVEN IN THE CASE OF OVERSATURATION) 
    130115               zdispot = kdca * zexcess * trb(ji,jj,jk,jpcal) 
    131 # if defined key_degrad 
    132                zdispot = zdispot * facvol(ji,jj,jk) 
    133 # endif 
    134116              !  CHANGE OF [CO3--] , [ALK], PARTICULATE [CACO3], 
    135117              !       AND [SUM(CO2)] DUE TO CACO3 DISSOLUTION/PRECIPITATION 
    136118              zcaldiss(ji,jj,jk)  = zdispot * rfact2 / rmtss ! calcite dissolution 
    137               zco3(ji,jj,jk)      = zco3(ji,jj,jk) + zcaldiss(ji,jj,jk) 
    138119              ! 
    139120              tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + 2. * zcaldiss(ji,jj,jk) 
     
    150131         IF( iom_use( "CO3sat" ) ) CALL iom_put( "CO3sat", zco3sat(:,:,:) * 1.e+3            * tmask(:,:,:) ) 
    151132         IF( iom_use( "DCAL"   ) ) CALL iom_put( "DCAL"  , zcaldiss(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) 
    152       ELSE 
    153          IF( ln_diatrc ) THEN 
    154             trc3d(:,:,:,jp_pcs0_3d    ) = -1. * LOG10( hi(:,:,:) ) * tmask(:,:,:) 
    155             trc3d(:,:,:,jp_pcs0_3d + 1) = zco3(:,:,:)              * tmask(:,:,:) 
    156             trc3d(:,:,:,jp_pcs0_3d + 2) = zco3sat(:,:,:)           * tmask(:,:,:) 
    157          ENDIF 
    158133      ENDIF 
    159134      ! 
     
    164139      ENDIF 
    165140      ! 
    166       CALL wrk_dealloc( jpi, jpj, jpk, zco3, zco3sat, zcaldiss ) 
     141      CALL wrk_dealloc( jpi, jpj, jpk, zco3, zcaldiss, zhinit, zhi, zco3sat ) 
    167142      ! 
    168143      IF( nn_timing == 1 )  CALL timing_stop('p4z_lys') 
     
    183158      !! 
    184159      !!---------------------------------------------------------------------- 
    185       INTEGER  ::  ji, jj, jk 
    186160      INTEGER  ::  ios                 ! Local integer output status for namelist read 
    187       REAL(wp) ::  zcaralk, zbicarb, zco3 
    188       REAL(wp) ::  ztmas, ztmas1 
    189161 
    190162      NAMELIST/nampiscal/ kdca, nca 
     
    212184      ! 
    213185   END SUBROUTINE p4z_lys_init 
    214  
    215 #else 
    216    !!====================================================================== 
    217    !!  Dummy module :                                   No PISCES bio-model 
    218    !!====================================================================== 
    219 CONTAINS 
    220    SUBROUTINE p4z_lys( kt )                   ! Empty routine 
    221       INTEGER, INTENT( in ) ::   kt 
    222       WRITE(*,*) 'p4z_lys: You should not have seen this print! error?', kt 
    223    END SUBROUTINE p4z_lys 
    224 #endif  
    225186   !!====================================================================== 
    226187END MODULE p4zlys 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90

    r5836 r7403  
    88   !!             3.4  !  2011-06  (O. Aumont, C. Ethe) Quota model for iron 
    99   !!---------------------------------------------------------------------- 
    10 #if defined key_pisces 
    11    !!---------------------------------------------------------------------- 
    12    !!   'key_pisces'                                       PISCES bio-model 
    13    !!---------------------------------------------------------------------- 
    1410   !!   p4z_meso       :   Compute the sources/sinks for mesozooplankton 
    1511   !!   p4z_meso_init  :   Initialization of the parameters for mesozooplankton 
     
    1814   USE trc             !  passive tracers common variables  
    1915   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 
    2216   USE p4zprod         !  production 
    2317   USE prtctl_trc      !  print control for debugging 
     
    7064      REAL(wp) :: zcompadi, zcompaph, zcompapoc, zcompaz, zcompam 
    7165      REAL(wp) :: zgraze2 , zdenom, zdenom2 
    72       REAL(wp) :: zfact   , zstep, zfood, zfoodlim, zproport 
    73       REAL(wp) :: zmortzgoc, zfrac, zfracfe, zratio, zratio2 
     66      REAL(wp) :: zfact   , zfood, zfoodlim, zproport 
     67      REAL(wp) :: zmortzgoc, zfrac, zfracfe, zratio, zratio2, zfracal, zgrazcal 
    7468      REAL(wp) :: zepshert, zepsherv, zgrarsig, zgraztot, zgraztotn, zgraztotf 
    7569      REAL(wp) :: zgrarem2, zgrafer2, zgrapoc2, zprcaca, zmortz2, zgrasrat, zgrasratn 
    76 #if defined key_kriest 
    77       REAL znumpoc 
    78 #endif 
    7970      REAL(wp) :: zrespz2, ztortz2, zgrazd, zgrazz, zgrazpof 
    8071      REAL(wp) :: zgrazn, zgrazpoc, zgraznf, zgrazf 
     
    8778      IF( nn_timing == 1 )  CALL timing_start('p4z_meso') 
    8879      ! 
    89       IF( lk_iomput ) THEN 
    90          CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 
    91          zgrazing(:,:,:) = 0._wp 
    92       ENDIF 
     80      CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 
     81      zgrazing(:,:,:) = 0._wp 
    9382 
    9483      DO jk = 1, jpkm1 
     
    9685            DO ji = 1, jpi 
    9786               zcompam   = MAX( ( trb(ji,jj,jk,jpmes) - 1.e-9 ), 0.e0 ) 
    98 # if defined key_degrad 
    99                zstep     = xstep * facvol(ji,jj,jk) 
    100 # else 
    101                zstep     = xstep 
    102 # endif 
    103                zfact     = zstep * tgfunc2(ji,jj,jk) * zcompam 
     87               zfact     = xstep * tgfunc2(ji,jj,jk) * zcompam 
    10488 
    10589               !  Respiration rates of both zooplankton 
     
    126110               zdenom    = zfoodlim / ( xkgraz2 + zfoodlim ) 
    127111               zdenom2   = zdenom / ( zfood + rtrn ) 
    128                zgraze2   = grazrat2 * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes)  
     112               zgraze2   = grazrat2 * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes)  
    129113 
    130114               zgrazd    = zgraze2  * xprefc   * zcompadi  * zdenom2  
     
    140124               !  ---------------------------------- 
    141125               !  ---------------------------------- 
    142 # if ! defined key_kriest 
    143                zgrazffeg = grazflux  * zstep * wsbio4(ji,jj,jk)      & 
     126               zgrazffeg = grazflux  * xstep * wsbio4(ji,jj,jk)      & 
    144127               &           * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) 
    145128               zgrazfffg = zgrazffeg * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 
    146 # endif 
    147                zgrazffep = grazflux  * zstep *  wsbio3(ji,jj,jk)     & 
     129               zgrazffep = grazflux  * xstep *  wsbio3(ji,jj,jk)     & 
    148130               &           * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpmes) 
    149131               zgrazfffp = zgrazffep * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 
    150132              ! 
    151 # if ! defined key_kriest 
    152133              zgraztot  = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep + zgrazffeg 
    153134              ! Compute the proportion of filter feeders 
     
    158139              zratio    = trb(ji,jj,jk,jpgsi) / ( trb(ji,jj,jk,jpgoc) + rtrn ) 
    159140              zratio2   = zratio * zratio 
    160               zfrac     = zproport * grazflux  * zstep * wsbio4(ji,jj,jk)      & 
     141              zfrac     = zproport * grazflux  * xstep * wsbio4(ji,jj,jk)      & 
    161142               &          * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes)          & 
    162143               &          * ( 0.2 + 3.8 * zratio2 / ( 1.**2 + zratio2 ) ) 
     
    171152              &   + zgrazpoc + zgrazffep + zgrazffeg 
    172153              zgraztotf = zgrazf + zgraznf + zgrazz * ferat3 + zgrazpof + zgrazfffp + zgrazfffg 
    173 # else 
    174               zgraztot  = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep 
    175               ! Compute the proportion of filter feeders 
    176               zproport  = zgrazffep / ( zgraztot + rtrn ) 
    177               zgrazffep = zproport * zgrazffep 
    178               zgrazfffp = zproport * zgrazfffp 
    179               zgraztot  = zgrazd + zgrazz + zgrazn + zgrazpoc + zgrazffep 
    180               zgraztotn = zgrazd * quotad(ji,jj,jk) + zgrazz + zgrazn * quotan(ji,jj,jk) + zgrazpoc + zgrazffep 
    181               zgraztotf = zgrazf + zgraznf + zgrazz * ferat3 + zgrazpof + zgrazfffp 
    182 # endif 
    183154 
    184155              ! Total grazing ( grazing by microzoo is already computed in p4zmicro ) 
    185               IF( lk_iomput )  zgrazing(ji,jj,jk) = zgraztot 
     156              zgrazing(ji,jj,jk) = zgraztot 
    186157 
    187158              !    Mesozooplankton efficiency 
     
    202173               tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgrarsig 
    203174               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem2 - zgrarsig 
     175               ! 
     176               IF( ln_ligand ) tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + (zgrarem2 - zgrarsig) * ldocz 
     177               ! 
    204178               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarsig 
    205179               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer2 
     
    220194               tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazf 
    221195 
    222                ! calcite production 
    223                zprcaca = xfracal(ji,jj,jk) * zgrazn 
    224                prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 
    225                ! 
    226                zprcaca = part2 * zprcaca 
    227                tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprcaca 
    228                tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * zprcaca 
    229                tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 
    230 #if defined key_kriest 
    231               znumpoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 
    232               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortzgoc - zgrazpoc - zgrazffep + zgrapoc2 
    233               tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zgrazpoc * znumpoc + zgrapoc2 * xkr_dmeso      & 
    234                  &   + zmortzgoc * xkr_dmeso - zgrazffep * znumpoc * wsbio4(ji,jj,jk) / ( wsbio3(ji,jj,jk) + rtrn ) 
    235               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortzgoc - zgrazfffp - zgrazpof    & 
    236                  &                 + zgraztotf * unass2 
    237 #else 
    238196              tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zgrazpoc - zgrazffep + zfrac 
     197              prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zfrac 
     198              conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazpoc - zgrazffep 
    239199              tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zmortzgoc - zgrazffeg + zgrapoc2 - zfrac 
     200              prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zmortzgoc + zgrapoc2 
     201              consgoc(ji,jj,jk) = consgoc(ji,jj,jk) - zgrazffeg - zfrac 
    240202              tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zgrazpof - zgrazfffp + zfracfe 
    241203              tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + ferat3 * zmortzgoc - zgrazfffg     & 
    242204                 &                + zgraztotf * unass2 - zfracfe 
    243 #endif 
     205              zfracal = trb(ji,jj,jk,jpcal) / (trb(ji,jj,jk,jppoc) + trb(ji,jj,jk,jpgoc) + rtrn ) 
     206              zgrazcal = (zgrazffeg + zgrazpoc) * (1. - part2) * zfracal 
     207              ! calcite production 
     208              zprcaca = xfracal(ji,jj,jk) * zgrazn 
     209              prodcal(ji,jj,jk) = prodcal(ji,jj,jk) + zprcaca  ! prodcal=prodcal(nanophy)+prodcal(microzoo)+prodcal(mesozoo) 
     210              ! 
     211              zprcaca = part2 * zprcaca 
     212              tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrazcal - zprcaca 
     213              tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * ( zgrazcal + zprcaca ) 
     214              tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) - zgrazcal + zprcaca 
    244215            END DO 
    245216         END DO 
     
    265236      ENDIF 
    266237      ! 
    267       IF( lk_iomput )  CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 
     238      CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 
    268239      ! 
    269240      IF( nn_timing == 1 )  CALL timing_stop('p4z_meso') 
     
    285256      !!---------------------------------------------------------------------- 
    286257 
    287       NAMELIST/nampismes/ part2, grazrat2, resrat2, mzrat2, xprefc, xprefp, xprefz,   & 
     258      NAMELIST/namp4zmes/ part2, grazrat2, resrat2, mzrat2, xprefc, xprefp, xprefz,   & 
    288259         &                xprefpoc, xthresh2dia, xthresh2phy, xthresh2zoo, xthresh2poc, & 
    289260         &                xthresh2, xkgraz2, epsher2, sigma2, unass2, grazflux 
     
    291262 
    292263      REWIND( numnatp_ref )              ! Namelist nampismes in reference namelist : Pisces mesozooplankton 
    293       READ  ( numnatp_ref, nampismes, IOSTAT = ios, ERR = 901) 
    294 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismes in reference namelist', lwp ) 
     264      READ  ( numnatp_ref, namp4zmes, IOSTAT = ios, ERR = 901) 
     265901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zmes in reference namelist', lwp ) 
    295266 
    296267      REWIND( numnatp_cfg )              ! Namelist nampismes in configuration namelist : Pisces mesozooplankton 
    297       READ  ( numnatp_cfg, nampismes, IOSTAT = ios, ERR = 902 ) 
    298 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismes in configuration namelist', lwp ) 
    299       IF(lwm) WRITE ( numonp, nampismes ) 
     268      READ  ( numnatp_cfg, namp4zmes, IOSTAT = ios, ERR = 902 ) 
     269902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zmes in configuration namelist', lwp ) 
     270      IF(lwm) WRITE ( numonp, namp4zmes ) 
    300271 
    301272 
    302273      IF(lwp) THEN                         ! control print 
    303274         WRITE(numout,*) ' '  
    304          WRITE(numout,*) ' Namelist parameters for mesozooplankton, nampismes' 
     275         WRITE(numout,*) ' Namelist parameters for mesozooplankton, namp4zmes' 
    305276         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
    306277         WRITE(numout,*) '    part of calcite not dissolved in mesozoo guts  part2        =', part2 
     
    327298   END SUBROUTINE p4z_meso_init 
    328299 
    329  
    330 #else 
    331    !!====================================================================== 
    332    !!  Dummy module :                                   No PISCES bio-model 
    333    !!====================================================================== 
    334 CONTAINS 
    335    SUBROUTINE p4z_meso                    ! Empty routine 
    336    END SUBROUTINE p4z_meso 
    337 #endif  
    338  
    339300   !!====================================================================== 
    340301END MODULE p4zmeso 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmicro.F90

    r5836 r7403  
    88   !!             3.4  !  2011-06  (O. Aumont, C. Ethe) Quota model for iron 
    99   !!---------------------------------------------------------------------- 
    10 #if defined key_pisces 
    11    !!---------------------------------------------------------------------- 
    12    !!   'key_pisces'                                       PISCES bio-model 
    13    !!---------------------------------------------------------------------- 
    1410   !!   p4z_micro       :   Compute the sources/sinks for microzooplankton 
    1511   !!   p4z_micro_init  :   Initialize and read the appropriate namelist 
     
    1915   USE sms_pisces      !  PISCES Source Minus Sink variables 
    2016   USE p4zlim          !  Co-limitations 
    21    USE p4zsink         !  vertical flux of particulate matter due to sinking 
    22    USE p4zint          !  interpolation and computation of various fields 
    2317   USE p4zprod         !  production 
    2418   USE iom             !  I/O manager 
     
    7165      REAL(wp) :: zcompadi, zcompaz , zcompaph, zcompapoc 
    7266      REAL(wp) :: zgraze  , zdenom, zdenom2 
    73       REAL(wp) :: zfact   , zstep, zfood, zfoodlim 
     67      REAL(wp) :: zfact   , zfood, zfoodlim 
    7468      REAL(wp) :: zepshert, zepsherv, zgrarsig, zgraztot, zgraztotn, zgraztotf 
    7569      REAL(wp) :: zgrarem, zgrafer, zgrapoc, zprcaca, zmortz 
     
    8377      IF( nn_timing == 1 )  CALL timing_start('p4z_micro') 
    8478      ! 
    85       IF( lk_iomput )  CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 
     79      CALL wrk_alloc( jpi, jpj, jpk, zgrazing ) 
    8680      ! 
    8781      DO jk = 1, jpkm1 
     
    8983            DO ji = 1, jpi 
    9084               zcompaz = MAX( ( trb(ji,jj,jk,jpzoo) - 1.e-9 ), 0.e0 ) 
    91                zstep   = xstep 
    92 # if defined key_degrad 
    93                zstep = zstep * facvol(ji,jj,jk) 
    94 # endif 
    95                zfact   = zstep * tgfunc2(ji,jj,jk) * zcompaz 
     85               zfact   = xstep * tgfunc2(ji,jj,jk) * zcompaz 
    9686 
    9787               !  Respiration rates of both zooplankton 
     
    115105               zdenom    = zfoodlim / ( xkgraz + zfoodlim ) 
    116106               zdenom2   = zdenom / ( zfood + rtrn ) 
    117                zgraze    = grazrat * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo)  
     107               zgraze    = grazrat * xstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo)  
    118108 
    119109               zgrazp    = zgraze  * xpref2p * zcompaph  * zdenom2  
     
    130120 
    131121               ! Grazing by microzooplankton 
    132                IF( ln_diatrc .AND. lk_iomput )  zgrazing(ji,jj,jk) = zgraztot 
     122               zgrazing(ji,jj,jk) = zgraztot 
    133123 
    134124               !    Various remineralization and excretion terms 
     
    148138               tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zgrarsig 
    149139               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zgrarem - zgrarsig 
     140               ! 
     141               IF( ln_ligand ) tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + (zgrarem - zgrarsig) * ldocz 
     142               ! 
    150143               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2ut * zgrarsig 
    151144               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zgrafer 
    152145               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zgrapoc 
     146               prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zgrapoc 
    153147               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zgraztotf * unass 
    154148               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zgrarsig 
    155149               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zgrarsig 
    156 #if defined key_kriest 
    157                tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zgrapoc * xkr_dmicro 
    158 #endif 
    159150               !   Update the arrays TRA which contain the biological sources and sinks 
    160151               !   -------------------------------------------------------------------- 
     
    170161               tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) - zgrazsf 
    171162               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortz - zgrazm 
     163               prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + zmortz 
     164               conspoc(ji,jj,jk) = conspoc(ji,jj,jk) - zgrazm 
    172165               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ferat3 * zmortz - zgrazmf 
    173166               ! 
     
    180173               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * zprcaca 
    181174               tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 
    182 #if defined key_kriest 
    183                tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zmortz * xkr_dmicro & 
    184                                                          - zgrazm * trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 
    185 #endif 
    186175            END DO 
    187176         END DO 
    188177      END DO 
    189178      ! 
    190       IF( lk_iomput .AND. knt == nrdttrc ) THEN 
    191          CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 
    192          IF( iom_use( "GRAZ1" ) ) THEN 
    193             zw3d(:,:,:) = zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:)  !  Total grazing of phyto by zooplankton 
    194             CALL iom_put( "GRAZ1", zw3d ) 
     179      IF( lk_iomput ) THEN 
     180         IF( knt == nrdttrc ) THEN 
     181           CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 
     182           IF( iom_use( "GRAZ1" ) ) THEN 
     183              zw3d(:,:,:) = zgrazing(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:)  !  Total grazing of phyto by zooplankton 
     184              CALL iom_put( "GRAZ1", zw3d ) 
     185           ENDIF 
     186           CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
    195187         ENDIF 
    196          CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
    197188      ENDIF 
    198189      ! 
     
    203194      ENDIF 
    204195      ! 
    205       IF( lk_iomput )  CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 
     196      CALL wrk_dealloc( jpi, jpj, jpk, zgrazing ) 
    206197      ! 
    207198      IF( nn_timing == 1 )  CALL timing_stop('p4z_micro') 
     
    224215      !!---------------------------------------------------------------------- 
    225216 
    226       NAMELIST/nampiszoo/ part, grazrat, resrat, mzrat, xpref2c, xpref2p, & 
     217      NAMELIST/namp4zzoo/ part, grazrat, resrat, mzrat, xpref2c, xpref2p, & 
    227218         &                xpref2d,  xthreshdia,  xthreshphy,  xthreshpoc, & 
    228219         &                xthresh, xkgraz, epsher, sigma1, unass 
     
    230221 
    231222      REWIND( numnatp_ref )              ! Namelist nampiszoo in reference namelist : Pisces microzooplankton 
    232       READ  ( numnatp_ref, nampiszoo, IOSTAT = ios, ERR = 901) 
    233 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiszoo in reference namelist', lwp ) 
     223      READ  ( numnatp_ref, namp4zzoo, IOSTAT = ios, ERR = 901) 
     224901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zzoo in reference namelist', lwp ) 
    234225 
    235226      REWIND( numnatp_cfg )              ! Namelist nampiszoo in configuration namelist : Pisces microzooplankton 
    236       READ  ( numnatp_cfg, nampiszoo, IOSTAT = ios, ERR = 902 ) 
    237 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiszoo in configuration namelist', lwp ) 
    238       IF(lwm) WRITE ( numonp, nampiszoo ) 
     227      READ  ( numnatp_cfg, namp4zzoo, IOSTAT = ios, ERR = 902 ) 
     228902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zzoo in configuration namelist', lwp ) 
     229      IF(lwm) WRITE ( numonp, namp4zzoo ) 
    239230 
    240231      IF(lwp) THEN                         ! control print 
    241232         WRITE(numout,*) ' ' 
    242          WRITE(numout,*) ' Namelist parameters for microzooplankton, nampiszoo' 
     233         WRITE(numout,*) ' Namelist parameters for microzooplankton, namp4zzoo' 
    243234         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
    244235         WRITE(numout,*) '    part of calcite not dissolved in microzoo guts  part        =', part 
     
    261252   END SUBROUTINE p4z_micro_init 
    262253 
    263 #else 
    264    !!====================================================================== 
    265    !!  Dummy module :                                   No PISCES bio-model 
    266    !!====================================================================== 
    267 CONTAINS 
    268    SUBROUTINE p4z_micro                    ! Empty routine 
    269    END SUBROUTINE p4z_micro 
    270 #endif  
    271  
    272254   !!====================================================================== 
    273255END MODULE p4zmicro 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmort.F90

    r5836 r7403  
    77   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90 
    88   !!---------------------------------------------------------------------- 
    9 #if defined key_pisces 
    10    !!---------------------------------------------------------------------- 
    11    !!   'key_pisces'                                       PISCES bio-model 
    12    !!---------------------------------------------------------------------- 
    139   !!   p4z_mort       :   Compute the mortality terms for phytoplankton 
    1410   !!   p4z_mort_init  :   Initialize the mortality params for phytoplankton 
     
    1713   USE trc             !  passive tracers common variables  
    1814   USE sms_pisces      !  PISCES Source Minus Sink variables 
    19    USE p4zsink         !  vertical flux of particulate matter due to sinking 
    2015   USE p4zprod         !  Primary productivity  
     16   USE p4zlim          !  Phytoplankton limitation terms 
    2117   USE prtctl_trc      !  print control for debugging 
    2218 
     
    3430   REAL(wp), PUBLIC :: mprat2  !: 
    3531 
    36  
    3732   !!---------------------------------------------------------------------- 
    3833   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
     
    7368      REAL(wp) :: zsizerat, zcompaph 
    7469      REAL(wp) :: zfactfe, zfactch, zprcaca, zfracal 
    75       REAL(wp) :: ztortp , zrespp , zmortp , zstep 
     70      REAL(wp) :: ztortp , zrespp , zmortp  
    7671      CHARACTER (len=25) :: charout 
    7772      !!--------------------------------------------------------------------- 
     
    8479            DO ji = 1, jpi 
    8580               zcompaph = MAX( ( trb(ji,jj,jk,jpphy) - 1e-8 ), 0.e0 ) 
    86                zstep    = xstep 
    87 # if defined key_degrad 
    88                zstep    = zstep * facvol(ji,jj,jk) 
    89 # endif 
    9081               !     When highly limited by macronutrients, very small cells  
    9182               !     dominate the community. As a consequence, aggregation 
     
    9586               !     Squared mortality of Phyto similar to a sedimentation term during 
    9687               !     blooms (Doney et al. 1996) 
    97                zrespp = wchl * 1.e6 * zstep * xdiss(ji,jj,jk) * zcompaph * zsizerat  
     88               zrespp = wchl * 1.e6 * xstep * xdiss(ji,jj,jk) * zcompaph * zsizerat  
    9889 
    9990               !     Phytoplankton mortality. This mortality loss is slightly 
     
    119110               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2. * zprcaca 
    120111               tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) + zprcaca 
    121 #if defined key_kriest 
    122                tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortp 
    123                tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + ztortp * xkr_dnano + zrespp * xkr_ddiat 
    124                tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zmortp * zfactfe 
    125 #else 
    126112               tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zfracal * zmortp 
    127113               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + ( 1. - zfracal ) * zmortp 
     114               prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + ( 1. - zfracal ) * zmortp 
     115               prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zfracal * zmortp 
    128116               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + ( 1. - zfracal ) * zmortp * zfactfe 
    129117               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zfracal * zmortp * zfactfe 
    130 #endif 
    131118            END DO 
    132119         END DO 
     
    153140      INTEGER  ::  ji, jj, jk 
    154141      REAL(wp) ::  zfactfe,zfactsi,zfactch, zcompadi 
    155       REAL(wp) ::  zrespp2, ztortp2, zmortp2, zstep 
     142      REAL(wp) ::  zrespp2, ztortp2, zmortp2 
    156143      REAL(wp) ::  zlim2, zlim1 
    157144      CHARACTER (len=25) :: charout 
     
    176163               !    sticky and coagulate to sink quickly out of the euphotic zone 
    177164               !     ------------------------------------------------------------ 
    178                zstep   = xstep 
    179 # if defined key_degrad 
    180                zstep = zstep * facvol(ji,jj,jk) 
    181 # endif 
    182165               !  Phytoplankton respiration  
    183166               !     ------------------------ 
    184167               zlim2   = xlimdia(ji,jj,jk) * xlimdia(ji,jj,jk) 
    185168               zlim1   = 0.25 * ( 1. - zlim2 ) / ( 0.25 + zlim2 )  
    186                zrespp2 = 1.e6 * zstep * (  wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * trb(ji,jj,jk,jpdia) 
     169               zrespp2 = 1.e6 * xstep * (  wchld + wchldm * zlim1 ) * xdiss(ji,jj,jk) * zcompadi * trb(ji,jj,jk,jpdia) 
    187170 
    188171               !     Phytoplankton mortality.  
    189172               !     ------------------------ 
    190                ztortp2 = mprat2 * zstep * trb(ji,jj,jk,jpdia)  / ( xkmort + trb(ji,jj,jk,jpdia) ) * zcompadi  
     173               ztortp2 = mprat2 * xstep * trb(ji,jj,jk,jpdia)  / ( xkmort + trb(ji,jj,jk,jpdia) ) * zcompadi  
    191174 
    192175               zmortp2 = zrespp2 + ztortp2 
     
    202185               tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) - zmortp2 * zfactsi 
    203186               tra(ji,jj,jk,jpgsi) = tra(ji,jj,jk,jpgsi) + zmortp2 * zfactsi 
    204 #if defined key_kriest 
    205                tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zmortp2   
    206                tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + ztortp2 * xkr_ddiat + zrespp2 * xkr_daggr 
    207                tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zmortp2 * zfactfe 
    208 #else 
    209187               tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zrespp2 + 0.5 * ztortp2 
    210188               tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + 0.5 * ztortp2 
     189               prodpoc(ji,jj,jk) = prodpoc(ji,jj,jk) + 0.5 * ztortp2 
     190               prodgoc(ji,jj,jk) = prodgoc(ji,jj,jk) + zrespp2 + 0.5 * ztortp2 
    211191               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + 0.5 * ztortp2 * zfactfe 
    212192               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + ( zrespp2 + 0.5 * ztortp2 ) * zfactfe 
    213 #endif 
    214193            END DO 
    215194         END DO 
     
    240219      !!---------------------------------------------------------------------- 
    241220 
    242       NAMELIST/nampismort/ wchl, wchld, wchldm, mprat, mprat2 
     221      NAMELIST/namp4zmort/ wchl, wchld, wchldm, mprat, mprat2 
    243222      INTEGER :: ios                 ! Local integer output status for namelist read 
    244223 
    245224      REWIND( numnatp_ref )              ! Namelist nampismort in reference namelist : Pisces phytoplankton 
    246       READ  ( numnatp_ref, nampismort, IOSTAT = ios, ERR = 901) 
    247 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismort in reference namelist', lwp ) 
     225      READ  ( numnatp_ref, namp4zmort, IOSTAT = ios, ERR = 901) 
     226901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zmort in reference namelist', lwp ) 
    248227 
    249228      REWIND( numnatp_cfg )              ! Namelist nampismort in configuration namelist : Pisces phytoplankton 
    250       READ  ( numnatp_cfg, nampismort, IOSTAT = ios, ERR = 902 ) 
    251 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismort in configuration namelist', lwp ) 
    252       IF(lwm) WRITE ( numonp, nampismort ) 
     229      READ  ( numnatp_cfg, namp4zmort, IOSTAT = ios, ERR = 902 ) 
     230902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zmort in configuration namelist', lwp ) 
     231      IF(lwm) WRITE ( numonp, namp4zmort ) 
    253232 
    254233      IF(lwp) THEN                         ! control print 
    255234         WRITE(numout,*) ' ' 
    256          WRITE(numout,*) ' Namelist parameters for phytoplankton mortality, nampismort' 
     235         WRITE(numout,*) ' Namelist parameters for phytoplankton mortality, namp4zmort' 
    257236         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
    258237         WRITE(numout,*) '    quadratic mortality of phytoplankton      wchl      =', wchl 
     
    265244   END SUBROUTINE p4z_mort_init 
    266245 
    267 #else 
    268    !!====================================================================== 
    269    !!  Dummy module :                                   No PISCES bio-model 
    270    !!====================================================================== 
    271 CONTAINS 
    272    SUBROUTINE p4z_mort                    ! Empty routine 
    273    END SUBROUTINE p4z_mort 
    274 #endif  
    275  
    276246   !!====================================================================== 
    277247END MODULE p4zmort 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90

    r6962 r7403  
    99   !!             3.4  !  2011-06  (O. Aumont, C. Ethe) Improve light availability of nano & diat 
    1010   !!---------------------------------------------------------------------- 
    11 #if defined  key_pisces 
    12    !!---------------------------------------------------------------------- 
    13    !!   'key_pisces'                                       PISCES bio-model 
    14    !!---------------------------------------------------------------------- 
    1511   !!   p4z_opt       : light availability in the water column 
    1612   !!---------------------------------------------------------------------- 
     
    4137   INTEGER  :: ntimes_par                ! number of time steps in a file 
    4238   REAL(wp), ALLOCATABLE, SAVE,   DIMENSION(:,:) :: par_varsw    !: PAR fraction of shortwave 
    43  
    44    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: enano, ediat   !: PAR for phyto, nano and diat  
    45    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: etot_ndcy      !: PAR over 24h in case of diurnal cycle 
    46    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: emoy           !: averaged PAR in the mixed layer 
    47    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ekb, ekg, ekr  !: wavelength (Red-Green-Blue) 
     39   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ekb, ekg, ekr  !: wavelength (Red-Green-Blue) 
    4840 
    4941   INTEGER  ::   nksrp   ! levels below which the light cannot penetrate ( depth larger than 391 m) 
    5042 
    51    REAL(wp), DIMENSION(3,61), PUBLIC ::   xkrgb   !: tabulated attenuation coefficients for RGB absorption 
     43   REAL(wp), DIMENSION(3,61) ::   xkrgb   !: tabulated attenuation coefficients for RGB absorption 
    5244    
    5345   !!---------------------------------------------------------------------- 
     
    7567      REAL(wp) ::   zc0 , zc1 , zc2, zc3, z1_dep 
    7668      REAL(wp), POINTER, DIMENSION(:,:  ) :: zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 
     69      REAL(wp), POINTER, DIMENSION(:,:  ) :: zetmp5 
    7770      REAL(wp), POINTER, DIMENSION(:,:  ) :: zqsr100, zqsr_corr 
    78       REAL(wp), POINTER, DIMENSION(:,:,:) :: zpar, ze0, ze1, ze2, ze3 
     71      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpar, ze0, ze1, ze2, ze3, zchl3d 
    7972      !!--------------------------------------------------------------------- 
    8073      ! 
     
    8275      ! 
    8376      ! Allocate temporary workspace 
    84       CALL wrk_alloc( jpi, jpj,      zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 ) 
    85       CALL wrk_alloc( jpi, jpj,      zqsr100, zqsr_corr ) 
    86       CALL wrk_alloc( jpi, jpj, jpk, zpar   , ze0, ze1, ze2, ze3 ) 
     77                   CALL wrk_alloc( jpi, jpj,      zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 ) 
     78                   CALL wrk_alloc( jpi, jpj,      zqsr100, zqsr_corr ) 
     79      IF( ln_p5z ) CALL wrk_alloc( jpi, jpj,      zetmp5 ) 
     80                   CALL wrk_alloc( jpi, jpj, jpk, zpar   , ze0, ze1, ze2, ze3, zchl3d ) 
    8781 
    8882      IF( knt == 1 .AND. ln_varpar ) CALL p4z_opt_sbc( kt ) 
     
    9387      ze2(:,:,:) = 0._wp 
    9488      ze3(:,:,:) = 0._wp 
     89      ! 
    9590      !                                        !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) 
    96       DO jk = 1, jpkm1                         !  -------------------------------------------------------- 
     91                                               !  -------------------------------------------------------- 
     92                    zchl3d(:,:,:) = trb(:,:,:,jpnch) + trb(:,:,:,jpdch) 
     93      IF( ln_p5z )  zchl3d(:,:,:) = zchl3d(:,:,:) + trb(:,:,:,jppch) 
     94      ! 
     95      DO jk = 1, jpkm1    
    9796         DO jj = 1, jpj 
    9897            DO ji = 1, jpi 
    99                zchl = ( trb(ji,jj,jk,jpnch) + trb(ji,jj,jk,jpdch) + rtrn ) * 1.e6 
     98               zchl = ( zchl3d(ji,jj,jk) + rtrn ) * 1.e6 
    10099               zchl = MIN(  10. , MAX( 0.05, zchl )  ) 
    101100               irgb = NINT( 41 + 20.* LOG10( zchl ) + rtrn ) 
     
    120119            ediat    (:,:,jk) =  1.6 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.7 * ze3(:,:,jk) 
    121120         END DO 
     121         IF( ln_p5z ) THEN 
     122            DO jk = 1, nksrp       
     123              epico  (:,:,jk) =  2.1 * ze1(:,:,jk) + 0.42 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 
     124            END DO 
     125         ENDIF 
    122126         ! 
    123127         zqsr_corr(:,:) = qsr(:,:) / ( 1. - fr_i(:,:) + rtrn ) 
     
    140144            ediat(:,:,jk) =  1.6 * ze1(:,:,jk) + 0.69 * ze2(:,:,jk) + 0.7 * ze3(:,:,jk) 
    141145         END DO 
     146         IF( ln_p5z ) THEN 
     147            DO jk = 1, nksrp       
     148              epico(:,:,jk) =  2.1 * ze1(:,:,jk) + 0.42 * ze2(:,:,jk) + 0.4 * ze3(:,:,jk) 
     149            END DO 
     150         ENDIF 
    142151         etot_ndcy(:,:,:) =  etot(:,:,:)  
    143152      ENDIF 
     
    155164      ENDIF 
    156165      !                                        !* Euphotic depth and level 
    157       neln(:,:) = 1                            !  ------------------------ 
    158       heup(:,:) = 300. 
     166      neln   (:,:) = 1                            !  ------------------------ 
     167      heup   (:,:) = gdepw_n(:,:,2) 
     168      heup_01(:,:) = gdepw_n(:,:,2) 
    159169 
    160170      DO jk = 2, nksrp 
     
    166176                 heup(ji,jj) = gdepw_n(ji,jj,jk+1)     ! Euphotic layer depth 
    167177              ENDIF 
     178              IF( etot_ndcy(ji,jj,jk) * tmask(ji,jj,jk) >= 0.50 )  THEN 
     179                 heup_01(ji,jj) = gdepw_n(ji,jj,jk+1)  ! Euphotic layer depth (light level definition) 
     180              ENDIF 
    168181           END DO 
    169182        END DO 
    170183      END DO 
    171184      ! 
    172       heup(:,:) = MIN( 300., heup(:,:) ) 
     185      heup   (:,:) = MIN( 300., heup   (:,:) ) 
     186      heup_01(:,:) = MIN( 300., heup_01(:,:) ) 
    173187      !                                        !* mean light over the mixed layer 
    174188      zdepmoy(:,:)   = 0.e0                    !  ------------------------------- 
     
    209223      END DO 
    210224      ! 
     225      IF( ln_p5z ) THEN 
     226         zetmp5 (:,:) = 0.e0 
     227         DO jk = 1, nksrp 
     228            DO jj = 1, jpj 
     229               DO ji = 1, jpi 
     230                  IF( gdepw_n(ji,jj,jk+1) <= hmld(ji,jj) ) THEN  
     231                     z1_dep = 1. / ( zdepmoy(ji,jj) + rtrn ) 
     232                     zetmp5(ji,jj)  = zetmp5 (ji,jj) + epico(ji,jj,jk) * e3t_n(ji,jj,jk) ! production 
     233                     epico(ji,jj,jk) = zetmp5(ji,jj) * z1_dep 
     234                  ENDIF 
     235               END DO 
     236            END DO 
     237         END DO 
     238      ENDIF 
    211239      IF( lk_iomput ) THEN 
    212240        IF( knt == nrdttrc ) THEN 
     
    215243           IF( iom_use( "PAR"   ) ) CALL iom_put( "PAR"  , emoy(:,:,:) * tmask(:,:,:) )  ! Photosynthetically Available Radiation 
    216244        ENDIF 
    217       ELSE 
    218          IF( ln_diatrc ) THEN        ! save output diagnostics 
    219             trc2d(:,:,  jp_pcs0_2d + 10) = heup(:,:  ) * tmask(:,:,1) 
    220             trc3d(:,:,:,jp_pcs0_3d + 3)  = etot(:,:,:) * tmask(:,:,:) 
    221          ENDIF 
    222       ENDIF 
    223       ! 
    224       CALL wrk_dealloc( jpi, jpj,      zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 ) 
    225       CALL wrk_dealloc( jpi, jpj,      zqsr100, zqsr_corr ) 
    226       CALL wrk_dealloc( jpi, jpj, jpk, zpar   ,  ze0, ze1, ze2, ze3 ) 
     245      ENDIF 
     246      ! 
     247                   CALL wrk_dealloc( jpi, jpj,      zdepmoy, zetmp1, zetmp2, zetmp3, zetmp4 ) 
     248                   CALL wrk_dealloc( jpi, jpj,      zqsr100, zqsr_corr ) 
     249      IF( ln_p5z ) CALL wrk_dealloc( jpi, jpj,      zetmp5 ) 
     250                   CALL wrk_dealloc( jpi, jpj, jpk, zpar   ,  ze0, ze1, ze2, ze3, zchl3d ) 
    227251      ! 
    228252      IF( nn_timing == 1 )  CALL timing_stop('p4z_opt') 
     
    407431                         enano    (:,:,:) = 0._wp 
    408432                         ediat    (:,:,:) = 0._wp 
     433      IF( ln_p5z     )   epico    (:,:,:) = 0._wp 
    409434      IF( ln_qsr_bio )   etot3    (:,:,:) = 0._wp 
    410435      !  
     
    418443      !!                     ***  ROUTINE p4z_opt_alloc  *** 
    419444      !!---------------------------------------------------------------------- 
    420       ALLOCATE( ekb(jpi,jpj,jpk)      , ekr(jpi,jpj,jpk), ekg(jpi,jpj,jpk),   & 
    421         &       enano(jpi,jpj,jpk)    , ediat(jpi,jpj,jpk), & 
    422         &       etot_ndcy(jpi,jpj,jpk), emoy (jpi,jpj,jpk), STAT=p4z_opt_alloc )  
    423          ! 
     445      ! 
     446      ALLOCATE( ekb(jpi,jpj,jpk), ekr(jpi,jpj,jpk), & 
     447                ekg(jpi,jpj,jpk), STAT= p4z_opt_alloc )  
     448      ! 
    424449      IF( p4z_opt_alloc /= 0 ) CALL ctl_warn('p4z_opt_alloc : failed to allocate arrays.') 
    425450      ! 
    426451   END FUNCTION p4z_opt_alloc 
    427  
    428 #else 
    429    !!---------------------------------------------------------------------- 
    430    !!  Dummy module :                                   No PISCES bio-model 
    431    !!---------------------------------------------------------------------- 
    432 CONTAINS 
    433    SUBROUTINE p4z_opt                   ! Empty routine 
    434    END SUBROUTINE p4z_opt 
    435 #endif  
    436452 
    437453   !!====================================================================== 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zprod.F90

    r6945 r7403  
    88   !!             3.4  !  2011-05  (O. Aumont, C. Ethe) New parameterization of light limitation 
    99   !!---------------------------------------------------------------------- 
    10 #if defined key_pisces 
    11    !!---------------------------------------------------------------------- 
    12    !!   'key_pisces'                                       PISCES bio-model 
    13    !!---------------------------------------------------------------------- 
    1410   !!   p4z_prod       :   Compute the growth Rate of the two phytoplanktons groups 
    1511   !!   p4z_prod_init  :   Initialization of the parameters for growth 
     
    1915   USE trc             !  passive tracers common variables  
    2016   USE sms_pisces      !  PISCES Source Minus Sink variables 
    21    USE p4zopt          !  optical model 
    2217   USE p4zlim          !  Co-limitations of differents nutrients 
    2318   USE prtctl_trc      !  print control for debugging 
     
    3328   !! * Shared module variables 
    3429   LOGICAL , PUBLIC ::  ln_newprod      !: 
    35    REAL(wp), PUBLIC ::  pislope         !: 
    36    REAL(wp), PUBLIC ::  pislope2        !: 
     30   REAL(wp), PUBLIC ::  pislopen         !: 
     31   REAL(wp), PUBLIC ::  pisloped        !: 
    3732   REAL(wp), PUBLIC ::  xadap           !: 
    38    REAL(wp), PUBLIC ::  excret          !: 
    39    REAL(wp), PUBLIC ::  excret2         !: 
     33   REAL(wp), PUBLIC ::  excretn          !: 
     34   REAL(wp), PUBLIC ::  excretd         !: 
    4035   REAL(wp), PUBLIC ::  bresp           !: 
    4136   REAL(wp), PUBLIC ::  chlcnm          !: 
     
    5146    
    5247   REAL(wp) :: r1_rday                !: 1 / rday 
    53    REAL(wp) :: texcret                !: 1 - excret  
    54    REAL(wp) :: texcret2               !: 1 - excret2         
     48   REAL(wp) :: texcretn               !: 1 - excretn  
     49   REAL(wp) :: texcretd               !: 1 - excretd         
    5550 
    5651   !!---------------------------------------------------------------------- 
     
    7570      INTEGER  ::   ji, jj, jk 
    7671      REAL(wp) ::   zsilfac, znanotot, zdiattot, zconctemp, zconctemp2 
    77       REAL(wp) ::   zratio, zmax, zsilim, ztn, zadap 
    78       REAL(wp) ::   zlim, zsilfac2, zsiborn, zprod, zproreg, zproreg2 
    79       REAL(wp) ::   zmxltst, zmxlday, zmaxday 
    80       REAL(wp) ::   zpislopen  , zpislope2n 
    81       REAL(wp) ::   zrum, zcodel, zargu, zval 
     72      REAL(wp) ::   zratio, zmax, zsilim, ztn, zadap, zlim, zsilfac2, zsiborn 
     73      REAL(wp) ::   zprod, zproreg, zproreg2, zprochln, zprochld 
     74      REAL(wp) ::   zmaxday, zdocprod, zpislopen, zpisloped 
     75      REAL(wp) ::   zmxltst, zmxlday 
     76      REAL(wp) ::   zrum, zcodel, zargu, zval, zfeup, chlcnm_n, chlcdm_n 
    8277      REAL(wp) ::   zfact 
    8378      CHARACTER (len=25) :: charout 
    84       REAL(wp), POINTER, DIMENSION(:,:  ) :: zmixnano, zmixdiat, zstrn, zw2d 
    85       REAL(wp), POINTER, DIMENSION(:,:,:) :: zpislopead, zpislopead2, zprdia, zprbio, zprdch, zprnch, zysopt, zw3d    
    86       REAL(wp), POINTER, DIMENSION(:,:,:) :: zprorca, zprorcad, zprofed, zprofen, zprochln, zprochld, zpronew, zpronewd 
     79      REAL(wp), POINTER, DIMENSION(:,:  ) :: zstrn, zw2d, zmixnano, zmixdiat 
     80      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpislopeadn, zpislopeadd, zysopt, zw3d    
     81      REAL(wp), POINTER, DIMENSION(:,:,:) :: zprdia, zprbio, zprdch, zprnch    
     82      REAL(wp), POINTER, DIMENSION(:,:,:) :: zprorcan, zprorcad, zprofed, zprofen 
     83      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpronewn, zpronewd 
     84      REAL(wp), POINTER, DIMENSION(:,:,:) :: zmxl_fac, zmxl_chl 
    8785      !!--------------------------------------------------------------------- 
    8886      ! 
     
    9088      ! 
    9189      !  Allocate temporary workspace 
    92       CALL wrk_alloc( jpi, jpj,      zmixnano, zmixdiat, zstrn                                                  ) 
    93       CALL wrk_alloc( jpi, jpj, jpk, zpislopead, zpislopead2, zprdia, zprbio, zprdch, zprnch, zysopt            )  
    94       CALL wrk_alloc( jpi, jpj, jpk, zprorca, zprorcad, zprofed, zprofen, zprochln, zprochld, zpronew, zpronewd ) 
    95       ! 
    96       zprorca (:,:,:) = 0._wp 
    97       zprorcad(:,:,:) = 0._wp 
    98       zprofed (:,:,:) = 0._wp 
    99       zprofen (:,:,:) = 0._wp 
    100       zprochln(:,:,:) = 0._wp 
    101       zprochld(:,:,:) = 0._wp 
    102       zpronew (:,:,:) = 0._wp 
    103       zpronewd(:,:,:) = 0._wp 
    104       zprdia  (:,:,:) = 0._wp 
    105       zprbio  (:,:,:) = 0._wp 
    106       zprdch  (:,:,:) = 0._wp 
    107       zprnch  (:,:,:) = 0._wp 
    108       zysopt  (:,:,:) = 0._wp 
     90      CALL wrk_alloc( jpi, jpj,      zmixnano, zmixdiat, zstrn ) 
     91      CALL wrk_alloc( jpi, jpj, jpk, zpislopeadn, zpislopeadd, zprdia, zprbio, zprdch, zprnch, zysopt )  
     92      CALL wrk_alloc( jpi, jpj, jpk, zmxl_fac, zmxl_chl ) 
     93      CALL wrk_alloc( jpi, jpj, jpk, zprorcan, zprorcad, zprofed, zprofen, zpronewn, zpronewd ) 
     94      ! 
     95      zprorcan(:,:,:) = 0._wp ; zprorcad(:,:,:) = 0._wp ; zprofed (:,:,:) = 0._wp 
     96      zprofen (:,:,:) = 0._wp ; zysopt  (:,:,:) = 0._wp 
     97      zpronewn(:,:,:) = 0._wp ; zpronewd(:,:,:) = 0._wp ; zprdia  (:,:,:) = 0._wp 
     98      zprbio  (:,:,:) = 0._wp ; zprdch  (:,:,:) = 0._wp ; zprnch  (:,:,:) = 0._wp  
     99      zmxl_fac(:,:,:) = 0._wp ; zmxl_chl(:,:,:) = 0._wp  
    109100 
    110101      ! Computation of the optimal production 
    111       prmax(:,:,:) = 0.6_wp * r1_rday * tgfunc(:,:,:)  
    112       IF( lk_degrad )  prmax(:,:,:) = prmax(:,:,:) * facvol(:,:,:)  
     102      prmax(:,:,:) = 0.8_wp * r1_rday * tgfunc(:,:,:)  
    113103 
    114104      ! compute the day length depending on latitude and the day 
     
    126116      END DO 
    127117 
    128       ! Impact of the day duration on phytoplankton growth 
     118      ! Impact of the day duration and light intermittency on phytoplankton growth 
    129119      DO jk = 1, jpkm1 
    130120         DO jj = 1 ,jpj 
     
    132122               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    133123                  zval = MAX( 1., zstrn(ji,jj) ) 
    134                   zval = 1.5 * zval / ( 12. + zval ) 
    135                   zprbio(ji,jj,jk) = prmax(ji,jj,jk) * zval * ( 1. - fr_i(ji,jj) ) 
    136                   zprdia(ji,jj,jk) = zprbio(ji,jj,jk) 
     124                  IF( gdept_n(ji,jj,jk) <= hmld(ji,jj) ) THEN 
     125                     zval = zval * MIN(1., heup_01(ji,jj) / ( hmld(ji,jj) + rtrn )) 
     126                  ENDIF 
     127                  zmxl_chl(ji,jj,jk) = zval / 24. 
     128                  zmxl_fac(ji,jj,jk) = 1.5 * zval / ( 12. + zval ) 
    137129               ENDIF 
    138130            END DO 
    139131         END DO 
    140132      END DO 
     133 
     134      zprbio(:,:,:) = prmax(:,:,:) * zmxl_fac(:,:,:) 
     135      zprdia(:,:,:) = zprbio(:,:,:) 
    141136 
    142137      ! Maximum light intensity 
    143138      WHERE( zstrn(:,:) < 1.e0 ) zstrn(:,:) = 24. 
    144       zstrn(:,:) = 24. / zstrn(:,:) 
     139 
     140      ! Computation of the P-I slope for nanos and diatoms 
     141      DO jk = 1, jpkm1 
     142         DO jj = 1, jpj 
     143            DO ji = 1, jpi 
     144               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
     145                  ztn         = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 
     146                  zadap       = xadap * ztn / ( 2.+ ztn ) 
     147                  zconctemp   = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 
     148                  zconctemp2  = trb(ji,jj,jk,jpdia) - zconctemp 
     149                  ! 
     150                  zpislopeadn(ji,jj,jk) = pislopen * ( 1.+ zadap  * EXP( -0.25 * enano(ji,jj,jk) ) )  & 
     151                  &                   * trb(ji,jj,jk,jpnch) /( trb(ji,jj,jk,jpphy) * 12. + rtrn) 
     152                  ! 
     153                  zpislopeadd(ji,jj,jk) = (pislopen * zconctemp2 + pisloped * zconctemp) / ( trb(ji,jj,jk,jpdia) + rtrn )   & 
     154                  &                   * trb(ji,jj,jk,jpdch) /( trb(ji,jj,jk,jpdia) * 12. + rtrn) 
     155               ENDIF 
     156            END DO 
     157         END DO 
     158      END DO 
    145159 
    146160      IF( ln_newprod ) THEN 
     
    148162            DO jj = 1, jpj 
    149163               DO ji = 1, jpi 
    150                   ! Computation of the P-I slope for nanos and diatoms 
    151164                  IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    152                       ztn         = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 
    153                       zadap       = xadap * ztn / ( 2.+ ztn ) 
    154                       zconctemp   = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 
    155                       zconctemp2  = trb(ji,jj,jk,jpdia) - zconctemp 
    156                       znanotot    = enano(ji,jj,jk) * zstrn(ji,jj) 
    157                       zdiattot    = ediat(ji,jj,jk) * zstrn(ji,jj) 
    158                       ! 
    159                       zpislopead (ji,jj,jk) = pislope * ( 1.+ zadap  * EXP( -znanotot ) )  & 
    160                          &                   * trb(ji,jj,jk,jpnch) /( trb(ji,jj,jk,jpphy) * 12. + rtrn) 
    161                       ! 
    162                       zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp) / ( trb(ji,jj,jk,jpdia) + rtrn )   & 
    163                          &                   * trb(ji,jj,jk,jpdch) /( trb(ji,jj,jk,jpdia) * 12. + rtrn) 
    164  
    165165                      ! Computation of production function for Carbon 
    166166                      !  --------------------------------------------- 
    167                       zpislopen  = zpislopead (ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) * rday + rtrn) 
    168                       zpislope2n = zpislopead2(ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) * rday + rtrn) 
    169                       zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen  * znanotot )  ) 
    170                       zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpislope2n * zdiattot )  ) 
    171  
     167                      zpislopen = zpislopeadn(ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) & 
     168                      &            * zmxl_fac(ji,jj,jk) * rday + rtrn) 
     169                      zpisloped = zpislopeadd(ji,jj,jk) / ( ( r1_rday + bresp * r1_rday ) & 
     170                      &            * zmxl_fac(ji,jj,jk) * rday + rtrn) 
     171                      zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) )  ) 
     172                      zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) )  ) 
    172173                      !  Computation of production function for Chlorophyll 
    173174                      !-------------------------------------------------- 
    174                       zmaxday  = 1._wp / ( prmax(ji,jj,jk) * rday + rtrn ) 
    175                       zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopead (ji,jj,jk) * zmaxday * znanotot ) ) 
    176                       zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopead2(ji,jj,jk) * zmaxday * zdiattot ) ) 
     175                      zpislopen = zpislopeadn(ji,jj,jk) / ( prmax(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 
     176                      zpisloped = zpislopeadd(ji,jj,jk) / ( prmax(ji,jj,jk) * zmxl_chl(ji,jj,jk) * rday + rtrn ) 
     177                      zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 
     178                      zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) ) 
    177179                  ENDIF 
    178180               END DO 
     
    183185            DO jj = 1, jpj 
    184186               DO ji = 1, jpi 
    185  
    186                   ! Computation of the P-I slope for nanos and diatoms 
    187187                  IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    188                       ztn         = MAX( 0., tsn(ji,jj,jk,jp_tem) - 15. ) 
    189                       zadap       = ztn / ( 2.+ ztn ) 
    190                       zconctemp   = MAX( 0.e0 , trb(ji,jj,jk,jpdia) - xsizedia ) 
    191                       zconctemp2  = trb(ji,jj,jk,jpdia) - zconctemp 
    192                       znanotot    = enano(ji,jj,jk) * zstrn(ji,jj) 
    193                       zdiattot    = ediat(ji,jj,jk) * zstrn(ji,jj) 
    194                       ! 
    195                       zpislopead (ji,jj,jk) = pislope  * ( 1.+ zadap  * EXP( -znanotot ) ) 
    196                       zpislopead2(ji,jj,jk) = (pislope * zconctemp2 + pislope2 * zconctemp)  / ( trb(ji,jj,jk,jpdia) + rtrn ) 
    197  
    198                       zpislopen =  zpislopead(ji,jj,jk) * trb(ji,jj,jk,jpnch)                & 
    199                         &          / ( trb(ji,jj,jk,jpphy) * 12.                  + rtrn )   & 
    200                         &          / ( prmax(ji,jj,jk) * rday * xlimphy(ji,jj,jk) + rtrn ) 
    201  
    202                       zpislope2n = zpislopead2(ji,jj,jk) * trb(ji,jj,jk,jpdch)                & 
    203                         &          / ( trb(ji,jj,jk,jpdia) * 12.                  + rtrn )   & 
    204                         &          / ( prmax(ji,jj,jk) * rday * xlimdia(ji,jj,jk) + rtrn ) 
    205  
    206188                      ! Computation of production function for Carbon 
    207189                      !  --------------------------------------------- 
    208                       zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen  * znanotot ) ) 
    209                       zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpislope2n * zdiattot ) ) 
    210  
     190                      zpislopen = zpislopeadn(ji,jj,jk)  / ( zprbio(ji,jj,jk) * rday * xlimphy(ji,jj,jk) + rtrn ) 
     191                      zpisloped = zpislopeadd(ji,jj,jk) / ( zprdia(ji,jj,jk) * rday * xlimdia(ji,jj,jk) + rtrn ) 
     192                      zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 
     193                      zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) ) 
    211194                      !  Computation of production function for Chlorophyll 
    212195                      !-------------------------------------------------- 
    213                       zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen  * enano(ji,jj,jk) ) ) 
    214                       zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislope2n * ediat(ji,jj,jk) ) ) 
     196                      zpislopen = zpislopen * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 
     197                      zpisloped = zpisloped * zmxl_fac(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 
     198                      zprnch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpislopen * enano(ji,jj,jk) ) ) 
     199                      zprdch(ji,jj,jk) = prmax(ji,jj,jk) * ( 1.- EXP( -zpisloped * ediat(ji,jj,jk) ) ) 
    215200                  ENDIF 
    216201               END DO 
     
    218203         END DO 
    219204      ENDIF 
    220  
    221205 
    222206      !  Computation of a proxy of the N/C ratio 
     
    261245      END DO 
    262246 
    263       !  Computation of the limitation term due to a mixed layer deeper than the euphotic depth 
    264       DO jj = 1, jpj 
    265          DO ji = 1, jpi 
    266             zmxltst = MAX( 0.e0, hmld(ji,jj) - heup(ji,jj) ) 
    267             zmxlday = zmxltst * zmxltst * r1_rday 
    268             zmixnano(ji,jj) = 1. - zmxlday / ( 2. + zmxlday ) 
    269             zmixdiat(ji,jj) = 1. - zmxlday / ( 4. + zmxlday ) 
    270          END DO 
    271       END DO 
    272   
    273       !  Mixed-layer effect on production                                                                                
    274       DO jk = 1, jpkm1 
    275          DO jj = 1, jpj 
    276             DO ji = 1, jpi 
    277                IF( gdepw_n(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 
    278                   zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * zmixnano(ji,jj) 
    279                   zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * zmixdiat(ji,jj) 
    280                ENDIF 
     247      !  Mixed-layer effect on production  
     248      !  Sea-ice effect on production 
     249 
     250      DO jk = 1, jpkm1 
     251         DO jj = 1, jpj 
     252            DO ji = 1, jpi 
    281253               zprbio(ji,jj,jk) = zprbio(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 
    282254               zprdia(ji,jj,jk) = zprdia(ji,jj,jk) * ( 1. - fr_i(ji,jj) ) 
     
    290262            DO ji = 1, jpi 
    291263               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    292                   !  production terms for nanophyto. 
    293                   zprorca(ji,jj,jk) = zprbio(ji,jj,jk)  * xlimphy(ji,jj,jk) * trb(ji,jj,jk,jpphy) * rfact2 
    294                   zpronew(ji,jj,jk) = zprorca(ji,jj,jk) * xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 
     264                  !  production terms for nanophyto. (C) 
     265                  zprorcan(ji,jj,jk) = zprbio(ji,jj,jk)  * xlimphy(ji,jj,jk) * trb(ji,jj,jk,jpphy) * rfact2 
     266                  zpronewn(ji,jj,jk)  = zprorcan(ji,jj,jk)* xnanono3(ji,jj,jk) / ( xnanono3(ji,jj,jk) + xnanonh4(ji,jj,jk) + rtrn ) 
    295267                  ! 
    296                   zratio = trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) + rtrn ) 
    297                   zratio = zratio / fecnm  
     268                  zratio = trb(ji,jj,jk,jpnfe) / ( trb(ji,jj,jk,jpphy) * fecnm + rtrn ) 
    298269                  zmax   = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) )  
    299                   zprofen(ji,jj,jk) = fecnm * prmax(ji,jj,jk) & 
     270                  zprofen(ji,jj,jk) = fecnm * prmax(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) ) & 
    300271                  &             * ( 4. - 4.5 * xlimnfe(ji,jj,jk) / ( xlimnfe(ji,jj,jk) + 0.5 ) )    & 
    301272                  &             * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concnfe(ji,jj,jk) )  & 
    302273                  &             * zmax * trb(ji,jj,jk,jpphy) * rfact2 
    303                   !  production terms for diatomees 
     274                  !  production terms for diatoms (C) 
    304275                  zprorcad(ji,jj,jk) = zprdia(ji,jj,jk) * xlimdia(ji,jj,jk) * trb(ji,jj,jk,jpdia) * rfact2 
    305276                  zpronewd(ji,jj,jk) = zprorcad(ji,jj,jk) * xdiatno3(ji,jj,jk) / ( xdiatno3(ji,jj,jk) + xdiatnh4(ji,jj,jk) + rtrn ) 
    306277                  ! 
    307                   zratio = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) + rtrn ) 
    308                   zratio = zratio / fecdm  
     278                  zratio = trb(ji,jj,jk,jpdfe) / ( trb(ji,jj,jk,jpdia) * fecdm + rtrn ) 
    309279                  zmax   = MAX( 0., ( 1. - zratio ) / ABS( 1.05 - zratio ) )  
    310                   zprofed(ji,jj,jk) = fecdm * prmax(ji,jj,jk) & 
     280                  zprofed(ji,jj,jk) = fecdm * prmax(ji,jj,jk) * ( 1.0 - fr_i(ji,jj) ) & 
    311281                  &             * ( 4. - 4.5 * xlimdfe(ji,jj,jk) / ( xlimdfe(ji,jj,jk) + 0.5 ) )    & 
    312282                  &             * biron(ji,jj,jk) / ( biron(ji,jj,jk) + concdfe(ji,jj,jk) )  & 
     
    317287      END DO 
    318288 
    319       DO jk = 1, jpkm1 
    320          DO jj = 1, jpj 
    321             DO ji = 1, jpi 
    322                IF( gdepw_n(ji,jj,jk+1) <= hmld(ji,jj) ) THEN 
    323                   zprnch(ji,jj,jk) = zprnch(ji,jj,jk) * zmixnano(ji,jj) 
    324                   zprdch(ji,jj,jk) = zprdch(ji,jj,jk) * zmixdiat(ji,jj) 
    325                ENDIF 
     289      ! Computation of the chlorophyll production terms 
     290      DO jk = 1, jpkm1 
     291         DO jj = 1, jpj 
     292            DO ji = 1, jpi 
    326293               IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
    327294                  !  production terms for nanophyto. ( chlorophyll ) 
    328                   znanotot = enano(ji,jj,jk) * zstrn(ji,jj) 
    329                   zprod    = rday * zprorca(ji,jj,jk) * zprnch(ji,jj,jk) * xlimphy(ji,jj,jk) 
    330                   zprochln(ji,jj,jk) = chlcmin * 12. * zprorca (ji,jj,jk) 
    331                   zprochln(ji,jj,jk) = zprochln(ji,jj,jk) + (chlcnm-chlcmin) * 12. * zprod / & 
    332                                      & (  zpislopead(ji,jj,jk) * znanotot +rtrn) 
    333                   !  production terms for diatomees ( chlorophyll ) 
    334                   zdiattot = ediat(ji,jj,jk) * zstrn(ji,jj) 
    335                   zprod = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * xlimdia(ji,jj,jk) 
    336                   zprochld(ji,jj,jk) = chlcmin * 12. * zprorcad(ji,jj,jk) 
    337                   zprochld(ji,jj,jk) = zprochld(ji,jj,jk) + (chlcdm-chlcmin) * 12. * zprod / & 
    338                                      & ( zpislopead2(ji,jj,jk) * zdiattot +rtrn ) 
     295                  znanotot = enano(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 
     296                  zprod    = rday * zprorcan(ji,jj,jk) * zprnch(ji,jj,jk) * xlimphy(ji,jj,jk) 
     297                  zprochln = chlcmin * 12. * zprorcan (ji,jj,jk) 
     298                  chlcnm_n   = MIN ( chlcnm, ( chlcnm / (1. - 1.14 / 43.4 *tsn(ji,jj,jk,jp_tem))) * (1. - 1.14 / 43.4 * 20.)) 
     299                  zprochln = zprochln + (chlcnm_n-chlcmin) * 12. * zprod / & 
     300                                        & (  zpislopeadn(ji,jj,jk) * znanotot +rtrn) 
     301                  !  production terms for diatoms ( chlorophyll ) 
     302                  zdiattot = ediat(ji,jj,jk) / ( zmxl_chl(ji,jj,jk) + rtrn ) 
     303                  zprod    = rday * zprorcad(ji,jj,jk) * zprdch(ji,jj,jk) * xlimdia(ji,jj,jk) 
     304                  zprochld = chlcmin * 12. * zprorcad(ji,jj,jk) 
     305                  chlcdm_n   = MIN ( chlcdm, ( chlcdm / (1. - 1.14 / 43.4 * tsn(ji,jj,jk,jp_tem))) * (1. - 1.14 / 43.4 * 20.)) 
     306                  zprochld = zprochld + (chlcdm_n-chlcmin) * 12. * zprod / & 
     307                                        & ( zpislopeadd(ji,jj,jk) * zdiattot +rtrn ) 
     308                  !   Update the arrays TRA which contain the Chla sources and sinks 
     309                  tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) + zprochln * texcretn 
     310                  tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) + zprochld * texcretd 
    339311               ENDIF 
    340312            END DO 
     
    346318         DO jj = 1, jpj 
    347319           DO ji =1 ,jpi 
    348               zproreg  = zprorca(ji,jj,jk) - zpronew(ji,jj,jk) 
    349               zproreg2 = zprorcad(ji,jj,jk) - zpronewd(ji,jj,jk) 
    350               tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) - zprorca(ji,jj,jk) - zprorcad(ji,jj,jk) 
    351               tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) - zpronew(ji,jj,jk) - zpronewd(ji,jj,jk) 
    352               tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) - zproreg - zproreg2 
    353               tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) + zprorca(ji,jj,jk) * texcret 
    354               tra(ji,jj,jk,jpnch) = tra(ji,jj,jk,jpnch) + zprochln(ji,jj,jk) * texcret 
    355               tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) + zprofen(ji,jj,jk) * texcret 
    356               tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) + zprorcad(ji,jj,jk) * texcret2 
    357               tra(ji,jj,jk,jpdch) = tra(ji,jj,jk,jpdch) + zprochld(ji,jj,jk) * texcret2 
    358               tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) + zprofed(ji,jj,jk) * texcret2 
    359               tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) + zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) * texcret2 
    360               tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + excret2 * zprorcad(ji,jj,jk) + excret * zprorca(ji,jj,jk) 
    361               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + o2ut * ( zproreg + zproreg2) & 
    362                  &                + ( o2ut + o2nit ) * ( zpronew(ji,jj,jk) + zpronewd(ji,jj,jk) ) 
    363               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - texcret * zprofen(ji,jj,jk) - texcret2 * zprofed(ji,jj,jk) 
    364               tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) - texcret2 * zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) 
    365               tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprorca(ji,jj,jk) - zprorcad(ji,jj,jk) 
    366               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zpronew(ji,jj,jk) + zpronewd(ji,jj,jk) ) & 
    367                  &                                      - rno3 * ( zproreg + zproreg2 ) 
    368           END DO 
     320              IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
     321                 zproreg  = zprorcan(ji,jj,jk) - zpronewn(ji,jj,jk) 
     322                 zproreg2 = zprorcad(ji,jj,jk) - zpronewd(ji,jj,jk) 
     323                 zdocprod = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) 
     324                 tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) - zprorcan(ji,jj,jk) - zprorcad(ji,jj,jk) 
     325                 tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) - zpronewn(ji,jj,jk) - zpronewd(ji,jj,jk) 
     326                 tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) - zproreg - zproreg2 
     327                 tra(ji,jj,jk,jpphy) = tra(ji,jj,jk,jpphy) + zprorcan(ji,jj,jk) * texcretn 
     328                 tra(ji,jj,jk,jpnfe) = tra(ji,jj,jk,jpnfe) + zprofen(ji,jj,jk) * texcretn 
     329                 tra(ji,jj,jk,jpdia) = tra(ji,jj,jk,jpdia) + zprorcad(ji,jj,jk) * texcretd 
     330                 tra(ji,jj,jk,jpdfe) = tra(ji,jj,jk,jpdfe) + zprofed(ji,jj,jk) * texcretd 
     331                 tra(ji,jj,jk,jpdsi) = tra(ji,jj,jk,jpdsi) + zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) * texcretd 
     332                 tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zdocprod 
     333                 tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + o2ut * ( zproreg + zproreg2) & 
     334                 &                   + ( o2ut + o2nit ) * ( zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) ) 
     335                 ! 
     336                 zfeup = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 
     337                 tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zfeup 
     338                 tra(ji,jj,jk,jpsil) = tra(ji,jj,jk,jpsil) - texcretd * zprorcad(ji,jj,jk) * zysopt(ji,jj,jk) 
     339                 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) - zprorcan(ji,jj,jk) - zprorcad(ji,jj,jk) 
     340                 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zpronewn(ji,jj,jk) + zpronewd(ji,jj,jk) ) & 
     341                 &                                         - rno3 * ( zproreg + zproreg2 ) 
     342              ENDIF 
     343           END DO 
    369344        END DO 
    370345     END DO 
     346     ! 
     347     IF( ln_ligand ) THEN 
     348         DO jk = 1, jpkm1 
     349            DO jj = 1, jpj 
     350              DO ji =1 ,jpi 
     351                 IF( etot_ndcy(ji,jj,jk) > 1.E-3 ) THEN 
     352                    zdocprod = excretd * zprorcad(ji,jj,jk) + excretn * zprorcan(ji,jj,jk) 
     353                    zfeup    = texcretn * zprofen(ji,jj,jk) + texcretd * zprofed(ji,jj,jk) 
     354                    tra(ji,jj,jk,jplgw) = tra(ji,jj,jk,jplgw) + zdocprod * ldocp - zfeup * plig(ji,jj,jk) * lthet 
     355                 ENDIF 
     356              END DO 
     357           END DO 
     358        END DO 
     359     ENDIF 
    371360 
    372361 
    373362    ! Total primary production per year 
    374363    IF( iom_use( "tintpp" ) .OR. ( ln_check_mass .AND. kt == nitend .AND. knt == nrdttrc )  )  & 
    375          & tpp = glob_sum( ( zprorca(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) ) 
     364         & tpp = glob_sum( ( zprorcan(:,:,:) + zprorcad(:,:,:) ) * cvol(:,:,:) ) 
    376365 
    377366    IF( lk_iomput ) THEN 
     
    381370          zfact = 1.e+3 * rfact2r  !  conversion from mol/l/kt to  mol/m3/s 
    382371          ! 
    383           IF( iom_use( "PPPHY" ) .OR. iom_use( "PPPHY2" ) )  THEN 
    384               zw3d(:,:,:) = zprorca (:,:,:) * zfact * tmask(:,:,:)  ! primary production by nanophyto 
    385               CALL iom_put( "PPPHY"  , zw3d ) 
     372          IF( iom_use( "PPPHYN" ) .OR. iom_use( "PPPHYD" ) )  THEN 
     373              zw3d(:,:,:) = zprorcan(:,:,:) * zfact * tmask(:,:,:)  ! primary production by nanophyto 
     374              CALL iom_put( "PPPHYN"  , zw3d ) 
    386375              ! 
    387376              zw3d(:,:,:) = zprorcad(:,:,:) * zfact * tmask(:,:,:)  ! primary production by diatomes 
    388               CALL iom_put( "PPPHY2"  , zw3d ) 
     377              CALL iom_put( "PPPHYD"  , zw3d ) 
    389378          ENDIF 
    390379          IF( iom_use( "PPNEWN" ) .OR. iom_use( "PPNEWD" ) )  THEN 
    391               zw3d(:,:,:) = zpronew (:,:,:) * zfact * tmask(:,:,:)  ! new primary production by nanophyto 
     380              zw3d(:,:,:) = zpronewn(:,:,:) * zfact * tmask(:,:,:)  ! new primary production by nanophyto 
    392381              CALL iom_put( "PPNEWN"  , zw3d ) 
    393382              ! 
     
    425414          ENDIF 
    426415          IF( iom_use( "TPP" ) )  THEN 
    427               zw3d(:,:,:) = ( zprorca(:,:,:) + zprorcad(:,:,:) ) * zfact * tmask(:,:,:)  ! total primary production 
     416              zw3d(:,:,:) = ( zprorcan(:,:,:) + zprorcad(:,:,:) ) * zfact * tmask(:,:,:)  ! total primary production 
    428417              CALL iom_put( "TPP"  , zw3d ) 
    429418          ENDIF 
    430419          IF( iom_use( "TPNEW" ) )  THEN 
    431               zw3d(:,:,:) = ( zpronew(:,:,:) + zpronewd(:,:,:) ) * zfact * tmask(:,:,:)  ! total new production 
     420              zw3d(:,:,:) = ( zpronewn(:,:,:) + zpronewd(:,:,:) ) * zfact * tmask(:,:,:)  ! total new production 
    432421              CALL iom_put( "TPNEW"  , zw3d ) 
    433422          ENDIF 
     
    436425              CALL iom_put( "TPBFE"  , zw3d ) 
    437426          ENDIF 
    438           IF( iom_use( "INTPPPHY" ) .OR. iom_use( "INTPPPHY2" ) ) THEN   
     427          IF( iom_use( "INTPPPHYN" ) .OR. iom_use( "INTPPPHYD" ) ) THEN   
    439428             zw2d(:,:) = 0. 
    440429             DO jk = 1, jpkm1 
    441                zw2d(:,:) = zw2d(:,:) + zprorca (:,:,jk) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk)  ! vert. integrated  primary produc. by nano 
     430               zw2d(:,:) = zw2d(:,:) + zprorcan(:,:,jk) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk)  ! vert. integrated  primary produc. by nano 
    442431             ENDDO 
    443              CALL iom_put( "INTPPPHY" , zw2d ) 
     432             CALL iom_put( "INTPPPHYN" , zw2d ) 
    444433             ! 
    445434             zw2d(:,:) = 0. 
     
    447436                zw2d(:,:) = zw2d(:,:) + zprorcad(:,:,jk) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert. integrated  primary produc. by diatom 
    448437             ENDDO 
    449              CALL iom_put( "INTPPPHY2" , zw2d ) 
     438             CALL iom_put( "INTPPPHYD" , zw2d ) 
    450439          ENDIF 
    451440          IF( iom_use( "INTPP" ) ) THEN    
    452441             zw2d(:,:) = 0. 
    453442             DO jk = 1, jpkm1 
    454                 zw2d(:,:) = zw2d(:,:) + ( zprorca(:,:,jk) + zprorcad(:,:,jk) ) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert. integrated pp 
     443                zw2d(:,:) = zw2d(:,:) + ( zprorcan(:,:,jk) + zprorcad(:,:,jk) ) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk) ! vert. integrated pp 
    455444             ENDDO 
    456445             CALL iom_put( "INTPP" , zw2d ) 
     
    459448             zw2d(:,:) = 0. 
    460449             DO jk = 1, jpkm1 
    461                 zw2d(:,:) = zw2d(:,:) + ( zpronew(:,:,jk) + zpronewd(:,:,jk) ) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk)  ! vert. integrated new prod 
     450                zw2d(:,:) = zw2d(:,:) + ( zpronewn(:,:,jk) + zpronewd(:,:,jk) ) * e3t_n(:,:,jk) * zfact * tmask(:,:,jk)  ! vert. integrated new prod 
    462451             ENDDO 
    463452             CALL iom_put( "INTPNEW" , zw2d ) 
     
    482471          CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
    483472       ENDIF 
    484      ELSE 
    485         IF( ln_diatrc ) THEN 
    486            zfact = 1.e+3 * rfact2r 
    487            trc3d(:,:,:,jp_pcs0_3d + 4)  = zprorca (:,:,:) * zfact * tmask(:,:,:) 
    488            trc3d(:,:,:,jp_pcs0_3d + 5)  = zprorcad(:,:,:) * zfact * tmask(:,:,:) 
    489            trc3d(:,:,:,jp_pcs0_3d + 6)  = zpronew (:,:,:) * zfact * tmask(:,:,:) 
    490            trc3d(:,:,:,jp_pcs0_3d + 7)  = zpronewd(:,:,:) * zfact * tmask(:,:,:) 
    491            trc3d(:,:,:,jp_pcs0_3d + 8)  = zprorcad(:,:,:) * zfact * tmask(:,:,:) * zysopt(:,:,:) 
    492            trc3d(:,:,:,jp_pcs0_3d + 9)  = zprofed (:,:,:) * zfact * tmask(:,:,:) 
    493 #  if ! defined key_kriest 
    494            trc3d(:,:,:,jp_pcs0_3d + 10) = zprofen (:,:,:) * zfact * tmask(:,:,:) 
    495 #  endif 
    496         ENDIF 
    497473     ENDIF 
    498474 
     
    503479     ENDIF 
    504480     ! 
    505      CALL wrk_dealloc( jpi, jpj,      zmixnano, zmixdiat, zstrn                                                  ) 
    506      CALL wrk_dealloc( jpi, jpj, jpk, zpislopead, zpislopead2, zprdia, zprbio, zprdch, zprnch, zysopt            )  
    507      CALL wrk_dealloc( jpi, jpj, jpk, zprorca, zprorcad, zprofed, zprofen, zprochln, zprochld, zpronew, zpronewd ) 
     481     CALL wrk_dealloc( jpi, jpj,  zmixnano, zmixdiat,    zstrn ) 
     482     CALL wrk_dealloc( jpi, jpj, jpk, zpislopeadn, zpislopeadd, zprdia, zprbio, zprdch, zprnch, zysopt )  
     483     CALL wrk_dealloc( jpi, jpj, jpk, zmxl_fac, zmxl_chl ) 
     484     CALL wrk_dealloc( jpi, jpj, jpk, zprorcan, zprorcad, zprofed, zprofen, zpronewn, zpronewd ) 
    508485     ! 
    509486     IF( nn_timing == 1 )  CALL timing_stop('p4z_prod') 
     
    524501      !!---------------------------------------------------------------------- 
    525502      ! 
    526       NAMELIST/nampisprod/ pislope, pislope2, xadap, ln_newprod, bresp, excret, excret2,  & 
     503      NAMELIST/namp4zprod/ pislopen, pisloped, xadap, ln_newprod, bresp, excretn, excretd,  & 
    527504         &                 chlcnm, chlcdm, chlcmin, fecnm, fecdm, grosip 
    528505      INTEGER :: ios                 ! Local integer output status for namelist read 
     
    530507 
    531508      REWIND( numnatp_ref )              ! Namelist nampisprod in reference namelist : Pisces phytoplankton production 
    532       READ  ( numnatp_ref, nampisprod, IOSTAT = ios, ERR = 901) 
    533 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisprod in reference namelist', lwp ) 
     509      READ  ( numnatp_ref, namp4zprod, IOSTAT = ios, ERR = 901) 
     510901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zprod in reference namelist', lwp ) 
    534511 
    535512      REWIND( numnatp_cfg )              ! Namelist nampisprod in configuration namelist : Pisces phytoplankton production 
    536       READ  ( numnatp_cfg, nampisprod, IOSTAT = ios, ERR = 902 ) 
    537 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisprod in configuration namelist', lwp ) 
    538       IF(lwm) WRITE ( numonp, nampisprod ) 
     513      READ  ( numnatp_cfg, namp4zprod, IOSTAT = ios, ERR = 902 ) 
     514902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namp4zprod in configuration namelist', lwp ) 
     515      IF(lwm) WRITE ( numonp, namp4zprod ) 
    539516 
    540517      IF(lwp) THEN                         ! control print 
    541518         WRITE(numout,*) ' ' 
    542          WRITE(numout,*) ' Namelist parameters for phytoplankton growth, nampisprod' 
     519         WRITE(numout,*) ' Namelist parameters for phytoplankton growth, namp4zprod' 
    543520         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
    544          WRITE(numout,*) '    Enable new parame. of production (T/F)   ln_newprod   =', ln_newprod 
     521         WRITE(numout,*) '    Enable new parame. of production (T/F)   ln_newprod    =', ln_newprod 
    545522         WRITE(numout,*) '    mean Si/C ratio                           grosip       =', grosip 
    546          WRITE(numout,*) '    P-I slope                                 pislope      =', pislope 
    547          WRITE(numout,*) '    Acclimation factor to low light           xadap       =', xadap 
    548          WRITE(numout,*) '    excretion ratio of nanophytoplankton      excret       =', excret 
    549          WRITE(numout,*) '    excretion ratio of diatoms                excret2      =', excret2 
     523         WRITE(numout,*) '    P-I slope                                 pislopen     =', pislopen 
     524         WRITE(numout,*) '    Acclimation factor to low light           xadap        =', xadap 
     525         WRITE(numout,*) '    excretion ratio of nanophytoplankton      excretn      =', excretn 
     526         WRITE(numout,*) '    excretion ratio of diatoms                excretd      =', excretd 
    550527         IF( ln_newprod )  THEN 
    551528            WRITE(numout,*) '    basal respiration in phytoplankton        bresp        =', bresp 
    552529            WRITE(numout,*) '    Maximum Chl/C in phytoplankton            chlcmin      =', chlcmin 
    553530         ENDIF 
    554          WRITE(numout,*) '    P-I slope  for diatoms                    pislope2     =', pislope2 
     531         WRITE(numout,*) '    P-I slope  for diatoms                    pisloped     =', pisloped 
    555532         WRITE(numout,*) '    Minimum Chl/C in nanophytoplankton        chlcnm       =', chlcnm 
    556533         WRITE(numout,*) '    Minimum Chl/C in diatoms                  chlcdm       =', chlcdm 
     
    560537      ! 
    561538      r1_rday   = 1._wp / rday  
    562       texcret   = 1._wp - excret 
    563       texcret2  = 1._wp - excret2 
     539      texcretn  = 1._wp - excretn 
     540      texcretd  = 1._wp - excretd 
    564541      tpp       = 0._wp 
    565542      ! 
     
    576553      ! 
    577554   END FUNCTION p4z_prod_alloc 
    578  
    579 #else 
    580    !!====================================================================== 
    581    !!  Dummy module :                                   No PISCES bio-model 
    582    !!====================================================================== 
    583 CONTAINS 
    584    SUBROUTINE p4z_prod                    ! Empty routine 
    585    END SUBROUTINE p4z_prod 
    586 #endif  
    587  
    588555   !!====================================================================== 
    589556END MODULE p4zprod 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zrem.F90

    r6945 r7403  
    88   !!             3.4  !  2011-06  (O. Aumont, C. Ethe) Quota model for iron 
    99   !!---------------------------------------------------------------------- 
    10 #if defined key_pisces 
    11    !!---------------------------------------------------------------------- 
    12    !!   'key_top'       and                                      TOP models 
    13    !!   'key_pisces'                                       PISCES bio-model 
    14    !!---------------------------------------------------------------------- 
    1510   !!   p4z_rem       :  Compute remineralization/dissolution of organic compounds 
    1611   !!   p4z_rem_init  :  Initialisation of parameters for remineralisation 
     
    2015   USE trc             !  passive tracers common variables  
    2116   USE sms_pisces      !  PISCES Source Minus Sink variables 
    22    USE p4zopt          !  optical model 
    2317   USE p4zche          !  chemical model 
    2418   USE p4zprod         !  Growth rate of the 2 phyto groups 
    25    USE p4zmeso         !  Sources and sinks of mesozooplankton 
    26    USE p4zint          !  interpolation and computation of various fields 
    2719   USE p4zlim 
    2820   USE prtctl_trc      !  print control for debugging 
     
    3830 
    3931   !! * Shared module variables 
     32   REAL(wp), PUBLIC ::  xremikc    !: remineralisation rate of DOC  
     33   REAL(wp), PUBLIC ::  xremikn    !: remineralisation rate of DON  
     34   REAL(wp), PUBLIC ::  xremikp    !: remineralisation rate of DOP  
    4035   REAL(wp), PUBLIC ::  xremik     !: remineralisation rate of POC  
    41    REAL(wp), PUBLIC ::  xremip     !: remineralisation rate of DOC 
    4236   REAL(wp), PUBLIC ::  nitrif     !: NH4 nitrification rate  
    4337   REAL(wp), PUBLIC ::  xsirem     !: remineralisation rate of POC  
    4438   REAL(wp), PUBLIC ::  xsiremlab  !: fast remineralisation rate of POC  
    4539   REAL(wp), PUBLIC ::  xsilab     !: fraction of labile biogenic silica  
    46  
     40   REAL(wp), PUBLIC ::  feratb     !: Fe/C quota in bacteria 
     41   REAL(wp), PUBLIC ::  xkferb     !: Half-saturation constant for bacteria Fe/C 
    4742 
    4843   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   denitr     !: denitrification array 
    49    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   denitnh4   !: -    -    -    -   - 
    5044 
    5145   !!---------------------------------------------------------------------- 
     
    6862      ! 
    6963      INTEGER  ::   ji, jj, jk 
    70       REAL(wp) ::   zremip, zremik, zsiremin  
     64      REAL(wp) ::   zremik, zremikc, zremikn, zremikp, zsiremin, zfact  
    7165      REAL(wp) ::   zsatur, zsatur2, znusil, znusil2, zdep, zdepmin, zfactdep 
    72       REAL(wp) ::   zbactfer, zorem, zorem2, zofer, zolimit 
    73       REAL(wp) ::   zosil, ztem 
    74 #if ! defined key_kriest 
    75       REAL(wp) ::   zofer2 
    76 #endif 
    77       REAL(wp) ::   zonitr, zstep, zfact 
     66      REAL(wp) ::   zbactfer, zolimit, zonitr, zrfact2 
     67      REAL(wp) ::   zosil, ztem, zdenitnh4, zolimic, zolimin, zolimip, zdenitrn, zdenitrp 
    7868      CHARACTER (len=25) :: charout 
    7969      REAL(wp), POINTER, DIMENSION(:,:  ) :: ztempbac 
    80       REAL(wp), POINTER, DIMENSION(:,:,:) :: zdepbac, zolimi, zdepprod, zw3d 
     70      REAL(wp), POINTER, DIMENSION(:,:,:) :: zdepbac, zolimi, zdepprod, zfacsi, zw3d, zfacsib 
    8171      !!--------------------------------------------------------------------- 
    8272      ! 
     
    8575      ! Allocate temporary workspace 
    8676      CALL wrk_alloc( jpi, jpj,      ztempbac                  ) 
    87       CALL wrk_alloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi ) 
     77      CALL wrk_alloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi, zfacsi, zfacsib ) 
    8878 
    8979      ! Initialisation of temprary arrys 
    9080      zdepprod(:,:,:) = 1._wp 
    9181      ztempbac(:,:)   = 0._wp 
     82      zfacsib(:,:,:)  = xsilab / ( 1.0 - xsilab ) 
     83      zfacsi(:,:,:)   = xsilab 
    9284 
    9385      ! Computation of the mean phytoplankton concentration as 
     
    112104      END DO 
    113105 
     106      IF( ln_p4z ) THEN 
     107         DO jk = 1, jpkm1 
     108            DO jj = 1, jpj 
     109               DO ji = 1, jpi 
     110                  ! DOC ammonification. Depends on depth, phytoplankton biomass 
     111                  ! and a limitation term which is supposed to be a parameterization of the bacterial activity.  
     112                  zremik = xremik * xstep / 1.e-6 * xlimbac(ji,jj,jk) * zdepbac(ji,jj,jk)  
     113                  zremik = MAX( zremik, 2.74e-4 * xstep ) 
     114                  ! Ammonification in oxic waters with oxygen consumption 
     115                  ! ----------------------------------------------------- 
     116                  zolimit = zremik * ( 1.- nitrfac(ji,jj,jk) ) * trb(ji,jj,jk,jpdoc)  
     117                  zolimi(ji,jj,jk) = MIN( ( trb(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit )  
     118                  ! Ammonification in suboxic waters with denitrification 
     119                  ! ------------------------------------------------------- 
     120                  denitr(ji,jj,jk)  = MIN(  ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit,   & 
     121                     &                     zremik * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc)  ) 
     122                  ! 
     123                  zolimi (ji,jj,jk) = MAX( 0.e0, zolimi (ji,jj,jk) ) 
     124                  denitr (ji,jj,jk) = MAX( 0.e0, denitr (ji,jj,jk) ) 
     125                  ! 
     126                  tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) 
     127                  tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) 
     128                  tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) - denitr (ji,jj,jk) * rdenit 
     129                  tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zolimi (ji,jj,jk) - denitr(ji,jj,jk) 
     130                  tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - zolimi (ji,jj,jk) * o2ut 
     131                  tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zolimi (ji,jj,jk) + denitr(ji,jj,jk) 
     132                  tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zolimi(ji,jj,jk)    & 
     133                  &                     + ( rdenit + 1.) * denitr(ji,jj,jk) ) 
     134               END DO 
     135            END DO 
     136         END DO 
     137      ELSE 
     138         DO jk = 1, jpkm1 
     139            DO jj = 1, jpj 
     140               DO ji = 1, jpi 
     141                  ! DOC ammonification. Depends on depth, phytoplankton biomass 
     142                  ! and a limitation term which is supposed to be a parameterization of the bacterial activity.  
     143                  ! ----------------------------------------------------------------- 
     144                  zremik = xstep / 1.e-6 * MAX(0.01, xlimbac(ji,jj,jk)) * zdepbac(ji,jj,jk)  
     145                  zremik = MAX( zremik, 2.74e-4 * xstep / xremikc ) 
     146 
     147                  zremikc = xremikc * zremik 
     148                  zremikn = xremikn / xremikc 
     149                  zremikp = xremikp / xremikc 
     150 
     151                  ! Ammonification in oxic waters with oxygen consumption 
     152                  ! ----------------------------------------------------- 
     153                  zolimit = zremikc * ( 1.- nitrfac(ji,jj,jk) ) * trb(ji,jj,jk,jpdoc)  
     154                  zolimic = MAX( 0.e0, MIN( ( trb(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit ) )  
     155                  zolimi(ji,jj,jk) = zolimic 
     156                  zolimin = zremikn * zolimic * trb(ji,jj,jk,jpdon) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 
     157                  zolimip = zremikp * zolimic * trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdoc) + rtrn )  
     158 
     159                  ! Ammonification in suboxic waters with denitrification 
     160                  ! ------------------------------------------------------- 
     161                  zolimit = zremikc * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc) 
     162                  denitr(ji,jj,jk)  = MIN(  ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit, zolimit ) 
     163                  denitr(ji,jj,jk) = MAX( 0.e0, denitr(ji,jj,jk) ) 
     164                  zdenitrn  = zremikn * denitr(ji,jj,jk) * trb(ji,jj,jk,jpdon) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 
     165                  zdenitrp  = zremikp * denitr(ji,jj,jk) * trb(ji,jj,jk,jpdop) / ( trb(ji,jj,jk,jpdoc) + rtrn ) 
     166 
     167                  tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + zolimip + zdenitrp 
     168                  tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zolimin + zdenitrn 
     169                  tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) - denitr(ji,jj,jk) * rdenit 
     170                  tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zolimic - denitr(ji,jj,jk) 
     171                  tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) - zolimin - zdenitrn 
     172                  tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) - zolimip - zdenitrp 
     173                  tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - zolimic * o2ut 
     174                  tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zolimic + denitr(ji,jj,jk) 
     175                  tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * ( zolimin + ( rdenit + 1.) * zdenitrn ) 
     176               END DO 
     177            END DO 
     178         END DO 
     179         ! 
     180      ENDIF 
     181 
     182 
    114183      DO jk = 1, jpkm1 
    115184         DO jj = 1, jpj 
    116185            DO ji = 1, jpi 
    117                zstep   = xstep 
    118 # if defined key_degrad 
    119                zstep = zstep * facvol(ji,jj,jk) 
    120 # endif 
    121                ! DOC ammonification. Depends on depth, phytoplankton biomass 
    122                ! and a limitation term which is supposed to be a parameterization 
    123                !     of the bacterial activity.  
    124                zremik = xremik * zstep / 1.e-6 * xlimbac(ji,jj,jk) * zdepbac(ji,jj,jk)  
    125                zremik = MAX( zremik, 2.74e-4 * xstep ) 
    126                ! Ammonification in oxic waters with oxygen consumption 
    127                ! ----------------------------------------------------- 
    128                zolimit = zremik * ( 1.- nitrfac(ji,jj,jk) ) * trb(ji,jj,jk,jpdoc)  
    129                zolimi(ji,jj,jk) = MIN( ( trb(ji,jj,jk,jpoxy) - rtrn ) / o2ut, zolimit )  
    130                ! Ammonification in suboxic waters with denitrification 
    131                ! ------------------------------------------------------- 
    132                denitr(ji,jj,jk)  = MIN(  ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit,   & 
    133                   &                     zremik * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc)  ) 
    134                ! 
    135                zolimi (ji,jj,jk) = MAX( 0.e0, zolimi (ji,jj,jk) ) 
    136                denitr (ji,jj,jk) = MAX( 0.e0, denitr (ji,jj,jk) ) 
    137                ! 
    138             END DO 
    139          END DO 
    140       END DO 
    141  
    142  
    143       DO jk = 1, jpkm1 
    144          DO jj = 1, jpj 
    145             DO ji = 1, jpi 
    146                zstep   = xstep 
    147 # if defined key_degrad 
    148                zstep = zstep * facvol(ji,jj,jk) 
    149 # endif 
    150186               ! NH4 nitrification to NO3. Ceased for oxygen concentrations 
    151187               ! below 2 umol/L. Inhibited at strong light  
    152188               ! ---------------------------------------------------------- 
    153                zonitr  =nitrif * zstep * trb(ji,jj,jk,jpnh4) / ( 1.+ emoy(ji,jj,jk) ) * ( 1.- nitrfac(ji,jj,jk) )  
    154                denitnh4(ji,jj,jk) = nitrif * zstep * trb(ji,jj,jk,jpnh4) * nitrfac(ji,jj,jk)  
     189               zonitr  = nitrif * xstep * trb(ji,jj,jk,jpnh4) * ( 1.- nitrfac(ji,jj,jk) )  & 
     190               &         / ( 1.+ emoy(ji,jj,jk) ) * ( 1. + fr_i(ji,jj) * emoy(ji,jj,jk) )  
     191               zdenitnh4 = nitrif * xstep * trb(ji,jj,jk,jpnh4) * nitrfac(ji,jj,jk) 
    155192               ! Update of the tracers trends 
    156193               ! ---------------------------- 
    157                tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) - zonitr - denitnh4(ji,jj,jk) 
    158                tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + zonitr - rdenita * denitnh4(ji,jj,jk) 
     194               tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) - zonitr - zdenitnh4 
     195               tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + zonitr - rdenita * zdenitnh4 
    159196               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2nit * zonitr 
    160                tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2 * rno3 * zonitr + rno3 * ( rdenita - 1. ) * denitnh4(ji,jj,jk) 
     197               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2 * rno3 * zonitr + rno3 * ( rdenita - 1. ) * zdenitnh4 
    161198            END DO 
    162199         END DO 
     
    177214               ! studies (especially at Papa) have shown this uptake to be significant 
    178215               ! ---------------------------------------------------------- 
    179                zbactfer = 10.e-6 *  rfact2 * prmax(ji,jj,jk) * xlimbacl(ji,jj,jk)             & 
    180                   &              * trb(ji,jj,jk,jpfer) / ( 2.5E-10 + trb(ji,jj,jk,jpfer) )    & 
     216               zbactfer = feratb *  rfact2 * prmax(ji,jj,jk) * xlimbacl(ji,jj,jk)             & 
     217                  &              * trb(ji,jj,jk,jpfer) / ( xkferb + trb(ji,jj,jk,jpfer) )    & 
    181218                  &              * zdepprod(ji,jj,jk) * zdepbac(ji,jj,jk) 
    182 #if defined key_kriest 
    183                tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zbactfer*0.05 
    184                tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zbactfer*0.05 
    185 #else 
    186219               tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - zbactfer*0.16 
    187220               tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zbactfer*0.12 
    188221               tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zbactfer*0.04 
    189 #endif 
    190222            END DO 
    191223         END DO 
     
    198230       ENDIF 
    199231 
     232      ! Initialization of the array which contains the labile fraction 
     233      ! of bSi. Set to a constant in the upper ocean 
     234      ! --------------------------------------------------------------- 
     235 
    200236      DO jk = 1, jpkm1 
    201237         DO jj = 1, jpj 
    202238            DO ji = 1, jpi 
    203                zstep   = xstep 
    204 # if defined key_degrad 
    205                zstep = zstep * facvol(ji,jj,jk) 
    206 # endif 
    207                ! POC disaggregation by turbulence and bacterial activity.  
    208                ! -------------------------------------------------------- 
    209                zremip = xremip * zstep * tgfunc(ji,jj,jk) * ( 1.- 0.55 * nitrfac(ji,jj,jk) )  
    210  
    211                ! POC disaggregation rate is reduced in anoxic zone as shown by 
    212                ! sediment traps data. In oxic area, the exponent of the martin s 
    213                ! law is around -0.87. In anoxic zone, it is around -0.35. This 
    214                ! means a disaggregation constant about 0.5 the value in oxic zones 
    215                ! ----------------------------------------------------------------- 
    216                zorem  = zremip * trb(ji,jj,jk,jppoc) 
    217                zofer  = zremip * trb(ji,jj,jk,jpsfe) 
    218 #if ! defined key_kriest 
    219                zorem2 = zremip * trb(ji,jj,jk,jpgoc) 
    220                zofer2 = zremip * trb(ji,jj,jk,jpbfe) 
    221 #else 
    222                zorem2 = zremip * trb(ji,jj,jk,jpnum) 
    223 #endif 
    224  
    225                ! Update the appropriate tracers trends 
    226                ! ------------------------------------- 
    227  
    228                tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zorem 
    229                tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + zofer 
    230 #if defined key_kriest 
    231                tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zorem 
    232                tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) - zorem2 
    233                tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zofer 
    234 #else 
    235                tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zorem2 - zorem 
    236                tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) - zorem2 
    237                tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + zofer2 - zofer 
    238                tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) - zofer2 
    239 #endif 
    240  
    241             END DO 
    242          END DO 
    243       END DO 
    244  
    245        IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
    246          WRITE(charout, FMT="('rem3')") 
    247          CALL prt_ctl_trc_info(charout) 
    248          CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 
    249        ENDIF 
    250  
    251       DO jk = 1, jpkm1 
    252          DO jj = 1, jpj 
    253             DO ji = 1, jpi 
    254                zstep   = xstep 
    255 # if defined key_degrad 
    256                zstep = zstep * facvol(ji,jj,jk) 
    257 # endif 
     239               zdep     = MAX( hmld(ji,jj), heup_01(ji,jj) ) 
     240               zsatur   = MAX( rtrn, ( sio3eq(ji,jj,jk) - trb(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn ) ) 
     241               zsatur2  = ( 1. + tsn(ji,jj,jk,jp_tem) / 400.)**37 
     242               znusil   = 0.225  * ( 1. + tsn(ji,jj,jk,jp_tem) / 15.) * zsatur + 0.775 * zsatur2 * zsatur**9.25 
    258243               ! Remineralization rate of BSi depedant on T and saturation 
    259244               ! --------------------------------------------------------- 
    260                zsatur   = ( sio3eq(ji,jj,jk) - trb(ji,jj,jk,jpsil) ) / ( sio3eq(ji,jj,jk) + rtrn ) 
    261                zsatur   = MAX( rtrn, zsatur ) 
    262                zsatur2  = ( 1. + tsn(ji,jj,jk,jp_tem) / 400.)**37 
    263                znusil   = 0.225  * ( 1. + tsn(ji,jj,jk,jp_tem) / 15.) * zsatur + 0.775 * zsatur2 * zsatur**9.25 
    264                znusil2  = 0.225  * ( 1. + tsn(ji,jj,1,jp_tem) / 15.) + 0.775 * zsatur2 
    265  
    266                ! Two classes of BSi are considered : a labile fraction and  
    267                ! a more refractory one. The ratio between both fractions is 
    268                ! constant and specified in the namelist. 
    269                ! ---------------------------------------------------------- 
    270                zdep     = MAX( hmld(ji,jj), heup(ji,jj) )  
    271                zdep     = MAX( 0., gdept_n(ji,jj,jk) - zdep ) 
    272                ztem     = MAX( tsn(ji,jj,1,jp_tem), 0. ) 
    273                zfactdep = xsilab * EXP(-( xsiremlab - xsirem ) * znusil2 * zdep / wsbio2 ) * ztem / ( ztem + 10. ) 
    274                zsiremin = ( xsiremlab * zfactdep + xsirem * ( 1. - zfactdep ) ) * zstep * znusil 
     245               IF ( gdept_n(ji,jj,jk) > zdep ) THEN 
     246                  zfacsib(ji,jj,jk) = zfacsib(ji,jj,jk-1) * EXP( -0.5 * ( xsiremlab - xsirem )  & 
     247                  &                   * znusil * e3t_n(ji,jj,jk) / wsbio4(ji,jj,jk) ) 
     248                  zfacsi(ji,jj,jk)  = zfacsib(ji,jj,jk) / ( 1.0 + zfacsib(ji,jj,jk) ) 
     249                  zfacsib(ji,jj,jk) = zfacsib(ji,jj,jk) * EXP( -0.5 * ( xsiremlab - xsirem )    & 
     250                  &                   * znusil * e3t_n(ji,jj,jk) / wsbio4(ji,jj,jk) ) 
     251               ENDIF 
     252               zsiremin = ( xsiremlab * zfacsi(ji,jj,jk) + xsirem * ( 1. - zfacsi(ji,jj,jk) ) ) * xstep * znusil 
    275253               zosil    = zsiremin * trb(ji,jj,jk,jpgsi) 
    276254               ! 
     
    283261 
    284262      IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
    285          WRITE(charout, FMT="('rem4')") 
     263         WRITE(charout, FMT="('rem3')") 
    286264         CALL prt_ctl_trc_info(charout) 
    287265         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 
    288266       ENDIF 
    289  
    290       ! Update the arrays TRA which contain the biological sources and sinks 
    291       ! -------------------------------------------------------------------- 
    292  
    293       DO jk = 1, jpkm1 
    294          tra(:,:,jk,jppo4) = tra(:,:,jk,jppo4) + zolimi (:,:,jk) + denitr(:,:,jk) 
    295          tra(:,:,jk,jpnh4) = tra(:,:,jk,jpnh4) + zolimi (:,:,jk) + denitr(:,:,jk) 
    296          tra(:,:,jk,jpno3) = tra(:,:,jk,jpno3) - denitr (:,:,jk) * rdenit 
    297          tra(:,:,jk,jpdoc) = tra(:,:,jk,jpdoc) - zolimi (:,:,jk) - denitr(:,:,jk) 
    298          tra(:,:,jk,jpoxy) = tra(:,:,jk,jpoxy) - zolimi (:,:,jk) * o2ut 
    299          tra(:,:,jk,jpdic) = tra(:,:,jk,jpdic) + zolimi (:,:,jk) + denitr(:,:,jk) 
    300          tra(:,:,jk,jptal) = tra(:,:,jk,jptal) + rno3 * ( zolimi(:,:,jk) + ( rdenit + 1.) * denitr(:,:,jk) ) 
    301       END DO 
    302267 
    303268      IF( knt == nrdttrc ) THEN 
     
    316281          CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
    317282       ENDIF 
    318  
    319       IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
    320          WRITE(charout, FMT="('rem6')") 
    321          CALL prt_ctl_trc_info(charout) 
    322          CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 
    323       ENDIF 
    324283      ! 
    325284      CALL wrk_dealloc( jpi, jpj,      ztempbac                  ) 
    326       CALL wrk_dealloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi ) 
     285      CALL wrk_dealloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi, zfacsi, zfacsib ) 
    327286      ! 
    328287      IF( nn_timing == 1 )  CALL timing_stop('p4z_rem') 
     
    343302      !! 
    344303      !!---------------------------------------------------------------------- 
    345       NAMELIST/nampisrem/ xremik, xremip, nitrif, xsirem, xsiremlab, xsilab 
     304      NAMELIST/nampisrem/ xremik, nitrif, xsirem, xsiremlab, xsilab, feratb, xkferb, &  
     305         &                xremikc, xremikn, xremikp 
    346306      INTEGER :: ios                 ! Local integer output status for namelist read 
    347307 
     
    359319         WRITE(numout,*) ' Namelist parameters for remineralization, nampisrem' 
    360320         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
    361          WRITE(numout,*) '    remineralisation rate of POC              xremip    =', xremip 
    362          WRITE(numout,*) '    remineralization rate of DOC              xremik    =', xremik 
     321         IF( ln_p4z ) THEN 
     322            WRITE(numout,*) '    remineralization rate of DOC              xremik    =', xremik 
     323         ELSE 
     324            WRITE(numout,*) '    remineralization rate of DOC              xremikc   =', xremikc 
     325            WRITE(numout,*) '    remineralization rate of DON              xremikn   =', xremikn 
     326            WRITE(numout,*) '    remineralization rate of DOP              xremikp   =', xremikp 
     327         ENDIF 
    363328         WRITE(numout,*) '    remineralization rate of Si               xsirem    =', xsirem 
    364329         WRITE(numout,*) '    fast remineralization rate of Si          xsiremlab =', xsiremlab 
    365330         WRITE(numout,*) '    fraction of labile biogenic silica        xsilab    =', xsilab 
    366331         WRITE(numout,*) '    NH4 nitrification rate                    nitrif    =', nitrif 
     332         WRITE(numout,*) '    Bacterial Fe/C ratio                      feratb    =', feratb 
     333         WRITE(numout,*) '    Half-saturation constant for bact. Fe/C   xkferb    =', xkferb 
    367334      ENDIF 
    368335      ! 
    369336      denitr  (:,:,:) = 0._wp 
    370       denitnh4(:,:,:) = 0._wp 
    371337      ! 
    372338   END SUBROUTINE p4z_rem_init 
     
    377343      !!                     ***  ROUTINE p4z_rem_alloc  *** 
    378344      !!---------------------------------------------------------------------- 
    379       ALLOCATE( denitr(jpi,jpj,jpk), denitnh4(jpi,jpj,jpk), STAT=p4z_rem_alloc ) 
     345      ALLOCATE( denitr(jpi,jpj,jpk), STAT=p4z_rem_alloc ) 
    380346      ! 
    381347      IF( p4z_rem_alloc /= 0 )   CALL ctl_warn('p4z_rem_alloc: failed to allocate arrays') 
    382348      ! 
    383349   END FUNCTION p4z_rem_alloc 
    384  
    385 #else 
    386    !!====================================================================== 
    387    !!  Dummy module :                                   No PISCES bio-model 
    388    !!====================================================================== 
    389 CONTAINS 
    390    SUBROUTINE p4z_rem                    ! Empty routine 
    391    END SUBROUTINE p4z_rem 
    392 #endif  
    393350 
    394351   !!====================================================================== 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsbc.F90

    r6962 r7403  
    55   !!====================================================================== 
    66   !! History :   3.5  !  2012-07 (O. Aumont, C. Ethe) Original code 
    7    !!---------------------------------------------------------------------- 
    8 #if defined key_pisces 
    9    !!---------------------------------------------------------------------- 
    10    !!   'key_pisces'                                       PISCES bio-model 
    117   !!---------------------------------------------------------------------- 
    128   !!   p4z_sbc        :  Read and interpolate time-varying nutrients fluxes 
     
    4137   REAL(wp), PUBLIC  :: concfediaz  !: Fe half-saturation Cste for diazotrophs  
    4238   REAL(wp)          :: hratio      !: Fe:3He ratio assumed for vent iron supply 
     39   REAL(wp), PUBLIC  :: fep_rats    !: Fep/Fer ratio from sed  sources 
     40   REAL(wp), PUBLIC  :: fep_rath    !: Fep/Fer ratio from hydro sources 
     41   REAL(wp), PUBLIC  :: lgw_rath    !: Weak ligand ratio from hydro sources 
     42 
    4343 
    4444   LOGICAL , PUBLIC  :: ll_sbc 
     
    7070   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: rivdic, rivalk    !: river input fields 
    7171   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: rivdin, rivdip    !: river input fields 
     72   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: rivdon, rivdop    !: river input fields 
     73   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: rivdoc    !: river input fields 
    7274   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: rivdsi    !: river input fields 
    7375   REAL(wp), PUBLIC, ALLOCATABLE, SAVE,   DIMENSION(:,:) :: nitdep    !: atmospheric N deposition  
     
    134136         IF( kt == nit000 .OR. ( kt /= nit000 .AND. ntimes_riv > 1 ) ) THEN 
    135137            CALL fld_read( kt, 1, sf_river ) 
    136             DO jj = 1, jpj 
    137                DO ji = 1, jpi 
    138                   zcoef = ryyss * e1e2t(ji,jj) * h_rnf(ji,jj)  
    139                   rivalk(ji,jj) =   sf_river(jr_dic)%fnow(ji,jj,1)                                    & 
    140                      &              * 1.E3        / ( 12. * zcoef + rtrn ) 
    141                   rivdic(ji,jj) = ( sf_river(jr_dic)%fnow(ji,jj,1) + sf_river(jr_doc)%fnow(ji,jj,1) ) & 
    142                      &              * 1.E3         / ( 12. * zcoef + rtrn ) 
    143                   rivdin(ji,jj) = ( sf_river(jr_din)%fnow(ji,jj,1) + sf_river(jr_don)%fnow(ji,jj,1) ) & 
    144                      &              * 1.E3 / rno3 / ( 14. * zcoef + rtrn ) 
    145                   rivdip(ji,jj) = ( sf_river(jr_dip)%fnow(ji,jj,1) + sf_river(jr_dop)%fnow(ji,jj,1) ) & 
    146                      &              * 1.E3 / po4r / ( 31. * zcoef + rtrn ) 
    147                   rivdsi(ji,jj) =   sf_river(jr_dsi)%fnow(ji,jj,1)                                    & 
    148                      &              * 1.E3        / ( 28.1 * zcoef + rtrn ) 
     138            IF( ln_p4z ) THEN 
     139               DO jj = 1, jpj 
     140                  DO ji = 1, jpi 
     141                     zcoef = ryyss * e1e2t(ji,jj) * h_rnf(ji,jj)  
     142                     rivalk(ji,jj) =   sf_river(jr_dic)%fnow(ji,jj,1)                                    & 
     143                        &              * 1.E3        / ( 12. * zcoef + rtrn ) 
     144                     rivdic(ji,jj) = ( sf_river(jr_dic)%fnow(ji,jj,1) + sf_river(jr_doc)%fnow(ji,jj,1) ) & 
     145                        &              * 1.E3         / ( 12. * zcoef + rtrn ) 
     146                     rivdin(ji,jj) = ( sf_river(jr_din)%fnow(ji,jj,1) + sf_river(jr_don)%fnow(ji,jj,1) ) & 
     147                        &              * 1.E3 / rno3 / ( 14. * zcoef + rtrn ) 
     148                     rivdip(ji,jj) = ( sf_river(jr_dip)%fnow(ji,jj,1) + sf_river(jr_dop)%fnow(ji,jj,1) ) & 
     149                        &              * 1.E3 / po4r / ( 31. * zcoef + rtrn ) 
     150                     rivdsi(ji,jj) =   sf_river(jr_dsi)%fnow(ji,jj,1)                                    & 
     151                        &              * 1.E3        / ( 28.1 * zcoef + rtrn ) 
     152                  END DO 
    149153               END DO 
    150             END DO 
     154            ELSE    !  ln_p5z 
     155               DO jj = 1, jpj 
     156                  DO ji = 1, jpi 
     157                     zcoef = ryyss * e1e2t(ji,jj) * h_rnf(ji,jj)  
     158                     rivalk(ji,jj) =   sf_river(jr_dic)%fnow(ji,jj,1)                                    & 
     159                        &              * 1.E3        / ( 12. * zcoef + rtrn ) 
     160                     rivdic(ji,jj) = ( sf_river(jr_dic)%fnow(ji,jj,1) ) & 
     161                        &              * 1.E3 / ( 12. * zcoef + rtrn ) * tmask(ji,jj,1) 
     162                     rivdin(ji,jj) = ( sf_river(jr_din)%fnow(ji,jj,1) ) & 
     163                        &              * 1.E3 / rno3 / ( 14. * zcoef + rtrn ) * tmask(ji,jj,1) 
     164                     rivdip(ji,jj) = ( sf_river(jr_dip)%fnow(ji,jj,1) ) & 
     165                        &              * 1.E3 / po4r / ( 31. * zcoef + rtrn ) * tmask(ji,jj,1) 
     166                     rivdoc(ji,jj) = ( sf_river(jr_doc)%fnow(ji,jj,1) ) & 
     167                        &              * 1.E3 / ( 12. * zcoef + rtrn ) * tmask(ji,jj,1) 
     168                     rivdon(ji,jj) = ( sf_river(jr_don)%fnow(ji,jj,1) ) & 
     169                        &              * 1.E3 / rno3 / ( 14. * zcoef + rtrn ) * tmask(ji,jj,1) 
     170                     rivdop(ji,jj) = ( sf_river(jr_dop)%fnow(ji,jj,1) ) & 
     171                        &              * 1.E3 / po4r / ( 31. * zcoef + rtrn ) * tmask(ji,jj,1) 
     172                  END DO 
     173               END DO 
     174            ENDIF 
    151175         ENDIF 
    152176      ENDIF 
     
    205229        &                sn_riverdip, sn_riverdop, sn_riverdsi, sn_ndepo, sn_ironsed, sn_hydrofe, & 
    206230        &                ln_dust, ln_solub, ln_river, ln_ndepo, ln_ironsed, ln_ironice, ln_hydrofe,    & 
    207         &                sedfeinput, dustsolub, icefeinput, wdust, mfrac, nitrfix, diazolight, concfediaz, hratio 
     231        &                sedfeinput, dustsolub, icefeinput, wdust, mfrac, nitrfix, diazolight, concfediaz, & 
     232        &                hratio, fep_rats, fep_rath, lgw_rath 
    208233      !!---------------------------------------------------------------------- 
    209234      ! 
     
    249274         WRITE(numout,*) '    fe half-saturation cste for diazotrophs  concfediaz  = ', concfediaz 
    250275         WRITE(numout,*) '    Fe to 3He ratio assumed for vent iron supply hratio  = ', hratio 
     276         IF( ln_ligand ) THEN 
     277            WRITE(numout,*) '    Fep/Fer ratio from sed sources            fep_rats   = ', fep_rats 
     278            WRITE(numout,*) '    Fep/Fer ratio from sed hydro sources      fep_rath   = ', fep_rath 
     279            WRITE(numout,*) '    Weak ligand ratio from sed hydro sources  lgw_rath   = ', lgw_rath 
     280         ENDIF 
    251281      END IF 
    252282 
     
    291321            END DO 
    292322            CALL iom_close( numdust ) 
    293             ztimes_dust = 1._wp / FLOAT( ntimes_dust )  
     323            ztimes_dust = 1._wp / REAL(ntimes_dust, wp)  
    294324            sumdepsi = 0.e0 
    295325            DO jm = 1, ntimes_dust 
     
    334364         ! 
    335365         ALLOCATE( rivdic(jpi,jpj), rivalk(jpi,jpj), rivdin(jpi,jpj), rivdip(jpi,jpj), rivdsi(jpi,jpj) )  
     366         IF( ln_p5z )  ALLOCATE( rivdon(jpi,jpj), rivdop(jpi,jpj), rivdoc(jpi,jpj) ) 
    336367         ! 
    337368         ALLOCATE( sf_river(jpriv), rivinput(jpriv), STAT=ierr1 )           !* allocate and fill sf_river (forcing structure) with sn_river_ 
     
    355386               END DO 
    356387               CALL iom_close( numriv ) 
    357                ztimes_riv = 1._wp / FLOAT(ntimes_riv)  
     388               ztimes_riv = 1._wp / REAL(ntimes_riv, wp)  
    358389               DO jm = 1, ntimes_riv 
    359390                  rivinput(ifpr) = rivinput(ifpr) + glob_sum( zriver(:,:,jm) * tmask(:,:,1) * ztimes_riv )  
     
    402433            END DO 
    403434            CALL iom_close( numdepo ) 
    404             ztimes_ndep = 1._wp / FLOAT( ntimes_ndep )  
     435            ztimes_ndep = 1._wp / REAL(ntimes_ndep, wp)  
    405436            nitdepinput = 0._wp 
    406437            DO jm = 1, ntimes_ndep 
     
    508539   END SUBROUTINE p4z_sbc_init 
    509540 
    510 #else 
    511    !!====================================================================== 
    512    !!  Dummy module :                                   No PISCES bio-model 
    513    !!====================================================================== 
    514 CONTAINS 
    515    SUBROUTINE p4z_sbc                         ! Empty routine 
    516    END SUBROUTINE p4z_sbc 
    517 #endif  
    518  
    519541   !!====================================================================== 
    520542END MODULE p4zsbc 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90

    r6140 r7403  
    99   !!             3.5  !  2012-07 (O. Aumont) improvment of river input of nutrients  
    1010   !!---------------------------------------------------------------------- 
    11 #if defined key_pisces 
    12    !!---------------------------------------------------------------------- 
    13    !!   'key_pisces'                                       PISCES bio-model 
    14    !!---------------------------------------------------------------------- 
    1511   !!   p4z_sed        :  Compute loss of organic matter in the sediments 
    1612   !!---------------------------------------------------------------------- 
     
    1814   USE trc             !  passive tracers common variables  
    1915   USE sms_pisces      !  PISCES Source Minus Sink variables 
    20    USE p4zsink         !  vertical flux of particulate matter due to sinking 
    21    USE p4zopt          !  optical model 
    2216   USE p4zlim          !  Co-limitations of differents nutrients 
    2317   USE p4zsbc          !  External source of nutrients  
     
    5650      INTEGER, INTENT(in) ::   kt, knt ! ocean time step 
    5751      INTEGER  ::   ji, jj, jk, ikt 
    58 #if ! defined key_sed 
    5952      REAL(wp) ::   zsumsedsi, zsumsedpo4, zsumsedcal 
    6053      REAL(wp) ::   zrivalk, zrivsil, zrivno3 
    61 #endif 
    6254      REAL(wp) ::  zwflux, zfminus, zfplus 
    6355      REAL(wp) ::  zlim, zfact, zfactcal 
    6456      REAL(wp) ::  zo2, zno3, zflx, zpdenit, z1pdenit, zdenitt, zolimit 
    65       REAL(wp) ::  zsiloss, zcaloss, zws3, zws4, zwsc, zdep, zwstpoc 
    66       REAL(wp) ::  ztrfer, ztrpo4, zwdust, zlight 
     57      REAL(wp) ::  zsiloss, zcaloss, zws3, zws4, zwsc, zdep 
     58      REAL(wp) ::  zwstpoc, zwstpon, zwstpop 
     59      REAL(wp) ::  ztrfer, ztrpo4s, ztrdp, zwdust, zmudia, ztemp 
     60      REAL(wp) ::  xdiano3, xdianh4 
     61      REAL(wp) ::  zwssfep 
    6762      ! 
    6863      CHARACTER (len=25) :: charout 
    69       REAL(wp), POINTER, DIMENSION(:,:  ) :: zpdep, zsidep, zwork1, zwork2, zwork3 
     64      REAL(wp), POINTER, DIMENSION(:,:  ) :: zsidep, zwork1, zwork2, zwork3 
    7065      REAL(wp), POINTER, DIMENSION(:,:  ) :: zdenit2d, zironice, zbureff 
    7166      REAL(wp), POINTER, DIMENSION(:,:  ) :: zwsbio3, zwsbio4, zwscal 
    72       REAL(wp), POINTER, DIMENSION(:,:,:) :: zirondep, zsoufer 
     67      REAL(wp), POINTER, DIMENSION(:,:  ) :: zsedcal, zsedsi, zsedc 
     68      REAL(wp), POINTER, DIMENSION(:,:,:) :: ztrpo4, ztrdop, zirondep, zsoufer, zpdep, zlight 
     69      REAL(wp), POINTER, DIMENSION(:,:  ) :: zwsfep 
     70 
    7371      !!--------------------------------------------------------------------- 
    7472      ! 
     
    7876      ! 
    7977      ! Allocate temporary workspace 
    80       CALL wrk_alloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zbureff ) 
    81       CALL wrk_alloc( jpi, jpj, zwsbio3, zwsbio4, zwscal ) 
    82       CALL wrk_alloc( jpi, jpj, jpk, zsoufer ) 
     78                      CALL wrk_alloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zbureff ) 
     79                      CALL wrk_alloc( jpi, jpj, zwsbio3, zwsbio4, zwscal ) 
     80                      CALL wrk_alloc( jpi, jpj, zsedcal,  zsedsi, zsedc ) 
     81                      CALL wrk_alloc( jpi, jpj, jpk, zlight, zsoufer ) 
     82      IF( ln_p5z )    CALL wrk_alloc( jpi, jpj, jpk, ztrpo4, ztrdop ) 
     83      IF( ln_ligand ) CALL wrk_alloc( jpi, jpj, zwsfep ) 
     84 
    8385 
    8486      zdenit2d(:,:) = 0.e0 
     
    8789      zwork2  (:,:) = 0.e0 
    8890      zwork3  (:,:) = 0.e0 
     91      zsedsi  (:,:) = 0.e0 
     92      zsedcal (:,:) = 0.e0 
     93      zsedc   (:,:) = 0.e0 
     94 
    8995 
    9096      ! Iron input/uptake due to sea ice : Crude parameterization based on Lancelot et al. 
     
    117123      IF( ln_dust ) THEN 
    118124         !                                               
    119          CALL wrk_alloc( jpi, jpj,      zpdep, zsidep ) 
    120          CALL wrk_alloc( jpi, jpj, jpk, zirondep      ) 
     125         CALL wrk_alloc( jpi, jpj,      zsidep ) 
     126         CALL wrk_alloc( jpi, jpj, jpk, zpdep, zirondep      ) 
    121127         !                                              ! Iron and Si deposition at the surface 
    122128         IF( ln_solub ) THEN 
     
    125131            zirondep(:,:,1) = dustsolub  * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 55.85 + 3.e-10 * r1_ryyss  
    126132         ENDIF 
    127          zsidep(:,:) = 8.8 * 0.075 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 28.1  
    128          zpdep (:,:) = 0.1 * 0.021 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 31. / po4r  
     133         zsidep(:,:)   = 8.8 * 0.075 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 28.1  
     134         zpdep (:,:,1) = 0.1 * 0.021 * dust(:,:) * mfrac * rfact2 / e3t_n(:,:,1) / 31. / po4r  
    129135         !                                              ! Iron solubilization of particles in the water column 
    130136         !                                              ! dust in kg/m2/s ---> 1/55.85 to put in mol/Fe ;  wdust in m/j 
     
    132138         DO jk = 2, jpkm1 
    133139            zirondep(:,:,jk) = dust(:,:) * mfrac * zwdust * rfact2 * EXP( -gdept_n(:,:,jk) / 540. ) 
     140            zpdep   (:,:,jk) = zirondep(:,:,jk) * 0.023 
    134141         END DO 
    135142         !                                              ! Iron solubilization of particles in the water column 
    136          tra(:,:,1,jppo4) = tra(:,:,1,jppo4) + zpdep   (:,:) 
    137143         tra(:,:,1,jpsil) = tra(:,:,1,jpsil) + zsidep  (:,:) 
     144         tra(:,:,:,jppo4) = tra(:,:,:,jppo4) + zpdep   (:,:,:) 
    138145         tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + zirondep(:,:,:)  
    139146         !  
     
    145152                &  CALL iom_put( "pdust"  , dust(:,:) / ( wdust * rday )  * tmask(:,:,1) ) ! dust concentration at surface 
    146153            ENDIF 
    147          ELSE                                     
    148             IF( ln_diatrc )  & 
    149               &  trc2d(:,:,jp_pcs0_2d + 11) = zirondep(:,:,1) * 1.e+3 * rfact2r * e3t_n(:,:,1) * tmask(:,:,1) 
    150154         ENDIF 
    151          CALL wrk_dealloc( jpi, jpj,      zpdep, zsidep ) 
    152          CALL wrk_dealloc( jpi, jpj, jpk, zirondep      ) 
     155         CALL wrk_dealloc( jpi, jpj,      zsidep ) 
     156         CALL wrk_dealloc( jpi, jpj, jpk, zpdep, zirondep      ) 
    153157         !                                               
    154158      ENDIF 
     
    169173            ENDDO 
    170174         ENDDO 
     175         IF( ln_p5z ) THEN 
     176            DO jj = 1, jpj 
     177               DO ji = 1, jpi 
     178                  DO jk = 1, nk_rnf(ji,jj) 
     179                     tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + rivdop(ji,jj) * rfact2 
     180                     tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + rivdon(ji,jj) * rfact2 
     181                     tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + rivdoc(ji,jj) * rfact2 
     182                  ENDDO 
     183               ENDDO 
     184            ENDDO 
     185         ENDIF 
    171186      ENDIF 
    172187       
     
    181196      ! ------------------------------------------------------ 
    182197      IF( ln_ironsed ) THEN 
    183          tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + ironsed(:,:,:) * rfact2 
     198                         tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + ironsed(:,:,:) * rfact2 
     199         IF( ln_ligand ) tra(:,:,:,jpfep) = tra(:,:,:,jpfep) + ( ironsed(:,:,:) * fep_rats ) * rfact2 
    184200         ! 
    185201         IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "Ironsed" ) )   & 
     
    190206      ! ------------------------------------------------------ 
    191207      IF( ln_hydrofe ) THEN 
    192          tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + hydrofe(:,:,:) * rfact2 
     208            tra(:,:,:,jpfer) = tra(:,:,:,jpfer) + hydrofe(:,:,:) * rfact2 
     209         IF( ln_ligand ) THEN 
     210            tra(:,:,:,jpfep) = tra(:,:,:,jpfep) + ( hydrofe(:,:,:) * fep_rath ) * rfact2 
     211            tra(:,:,:,jplgw) = tra(:,:,:,jplgw) + ( hydrofe(:,:,:) * lgw_rath ) * rfact2 
     212         ENDIF 
    193213         ! 
    194214         IF( lk_iomput .AND. knt == nrdttrc .AND. iom_use( "HYDR" ) )   & 
     
    196216      ENDIF 
    197217 
    198       ! OA: Warning, the following part is necessary, especially with Kriest 
    199       ! to avoid CFL problems above the sediments 
     218      ! OA: Warning, the following part is necessary to avoid CFL problems above the sediments 
    200219      ! -------------------------------------------------------------------- 
    201220      DO jj = 1, jpj 
     
    208227         END DO 
    209228      END DO 
    210  
    211 #if ! defined key_sed 
    212       ! Computation of the sediment denitrification proportion: The metamodel from midlleburg (2006) is being used 
    213       ! Computation of the fraction of organic matter that is permanently buried from Dunne's model 
    214       ! ------------------------------------------------------- 
    215       DO jj = 1, jpj 
    216          DO ji = 1, jpi 
    217            IF( tmask(ji,jj,1) == 1 ) THEN 
    218               ikt = mbkt(ji,jj) 
    219 # if defined key_kriest 
    220               zflx =    trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj)    * 1E3 * 1E6 / 1E4 
    221 # else 
    222               zflx = (  trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj)   & 
    223                 &     + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) )  * 1E3 * 1E6 / 1E4 
    224 #endif 
    225               zflx  = LOG10( MAX( 1E-3, zflx ) ) 
    226               zo2   = LOG10( MAX( 10. , trb(ji,jj,ikt,jpoxy) * 1E6 ) ) 
    227               zno3  = LOG10( MAX( 1.  , trb(ji,jj,ikt,jpno3) * 1E6 * rno3 ) ) 
    228               zdep  = LOG10( gdepw_n(ji,jj,ikt+1) ) 
    229               zdenit2d(ji,jj) = -2.2567 - 1.185 * zflx - 0.221 * zflx**2 - 0.3995 * zno3 * zo2 + 1.25 * zno3    & 
    230               &                + 0.4721 * zo2 - 0.0996 * zdep + 0.4256 * zflx * zo2 
    231               zdenit2d(ji,jj) = 10.0**( zdenit2d(ji,jj) ) 
    232               ! 
    233               zflx = (  trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj)   & 
    234                 &     + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E6 
    235               zbureff(ji,jj) = 0.013 + 0.53 * zflx**2 / ( 7.0 + zflx )**2 
    236            ENDIF 
    237          END DO 
    238       END DO  
    239  
    240       ! Loss of biogenic silicon, Caco3 organic carbon in the sediments.  
    241       ! First, the total loss is computed. 
    242       ! The factor for calcite comes from the alkalinity effect 
    243       ! ------------------------------------------------------------- 
    244       DO jj = 1, jpj 
    245          DO ji = 1, jpi 
    246             IF( tmask(ji,jj,1) == 1 ) THEN 
    247                ikt = mbkt(ji,jj)  
    248 # if defined key_kriest 
    249                zwork1(ji,jj) = trb(ji,jj,ikt,jpgsi) * zwscal (ji,jj) 
    250                zwork2(ji,jj) = trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) 
    251 # else 
    252                zwork1(ji,jj) = trb(ji,jj,ikt,jpgsi) * zwsbio4(ji,jj) 
    253                zwork2(ji,jj) = trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj)  
    254 # endif 
    255                ! For calcite, burial efficiency is made a function of saturation 
    256                zfactcal      = MIN( excess(ji,jj,ikt), 0.2 ) 
    257                zfactcal      = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 
    258                zwork3(ji,jj) = trb(ji,jj,ikt,jpcal) * zwscal(ji,jj) * 2.e0 * zfactcal 
    259             ENDIF 
    260          END DO 
    261       END DO 
    262       zsumsedsi  = glob_sum( zwork1(:,:) * e1e2t(:,:) ) * r1_rday 
    263       zsumsedpo4 = glob_sum( zwork2(:,:) * e1e2t(:,:) ) * r1_rday 
    264       zsumsedcal = glob_sum( zwork3(:,:) * e1e2t(:,:) ) * r1_rday 
    265 #endif 
     229      ! 
     230      IF( ln_ligand ) THEN 
     231         DO jj = 1, jpj 
     232            DO ji = 1, jpi 
     233               ikt  = mbkt(ji,jj) 
     234               zdep = e3t_n(ji,jj,ikt) / xstep 
     235               zwsfep(ji,jj)  = MIN( 0.99 * zdep, wsfep(ji,jj,ikt)  ) 
     236            END DO 
     237         ENDDO 
     238      ENDIF 
     239 
     240      IF( .NOT.lk_sed ) THEN 
     241         ! Computation of the sediment denitrification proportion: The metamodel from midlleburg (2006) is being used 
     242         ! Computation of the fraction of organic matter that is permanently buried from Dunne's model 
     243         ! ------------------------------------------------------- 
     244         DO jj = 1, jpj 
     245            DO ji = 1, jpi 
     246              IF( tmask(ji,jj,1) == 1 ) THEN 
     247                 ikt = mbkt(ji,jj) 
     248                 zflx = (  trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj)   & 
     249                   &     + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) )  * 1E3 * 1E6 / 1E4 
     250                 zflx  = LOG10( MAX( 1E-3, zflx ) ) 
     251                 zo2   = LOG10( MAX( 10. , trb(ji,jj,ikt,jpoxy) * 1E6 ) ) 
     252                 zno3  = LOG10( MAX( 1.  , trb(ji,jj,ikt,jpno3) * 1E6 * rno3 ) ) 
     253                 zdep  = LOG10( gdepw_n(ji,jj,ikt+1) ) 
     254                 zdenit2d(ji,jj) = -2.2567 - 1.185 * zflx - 0.221 * zflx**2 - 0.3995 * zno3 * zo2 + 1.25 * zno3    & 
     255                   &                + 0.4721 * zo2 - 0.0996 * zdep + 0.4256 * zflx * zo2 
     256                 zdenit2d(ji,jj) = 10.0**( zdenit2d(ji,jj) ) 
     257                   ! 
     258                 zflx = (  trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj)   & 
     259                   &     + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj) ) * 1E6 
     260                 zbureff(ji,jj) = 0.013 + 0.53 * zflx**2 / ( 7.0 + zflx )**2 
     261                ENDIF 
     262              END DO 
     263           END DO  
     264 
     265           ! Loss of biogenic silicon, Caco3 organic carbon in the sediments.  
     266           ! First, the total loss is computed. 
     267           ! The factor for calcite comes from the alkalinity effect 
     268           ! ------------------------------------------------------------- 
     269           DO jj = 1, jpj 
     270              DO ji = 1, jpi 
     271                 IF( tmask(ji,jj,1) == 1 ) THEN 
     272                    ikt = mbkt(ji,jj)  
     273                    zwork1(ji,jj) = trb(ji,jj,ikt,jpgsi) * zwsbio4(ji,jj) 
     274                    zwork2(ji,jj) = trb(ji,jj,ikt,jpgoc) * zwsbio4(ji,jj) + trb(ji,jj,ikt,jppoc) * zwsbio3(ji,jj)  
     275                    ! For calcite, burial efficiency is made a function of saturation 
     276                    zfactcal      = MIN( excess(ji,jj,ikt), 0.2 ) 
     277                    zfactcal      = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 
     278                    zwork3(ji,jj) = trb(ji,jj,ikt,jpcal) * zwscal(ji,jj) * 2.e0 * zfactcal 
     279                ENDIF 
     280            END DO 
     281         END DO 
     282         zsumsedsi  = glob_sum( zwork1(:,:) * e1e2t(:,:) ) * r1_rday 
     283         zsumsedpo4 = glob_sum( zwork2(:,:) * e1e2t(:,:) ) * r1_rday 
     284         zsumsedcal = glob_sum( zwork3(:,:) * e1e2t(:,:) ) * r1_rday 
     285         ! 
     286      ENDIF 
    266287 
    267288      ! This loss is scaled at each bottom grid cell for equilibrating the total budget of silica in the ocean. 
    268289      ! Thus, the amount of silica lost in the sediments equal the supply at the surface (dust+rivers) 
    269290      ! ------------------------------------------------------ 
    270 #if ! defined key_sed 
    271       zrivsil =  1._wp - ( sumdepsi + rivdsiinput * r1_ryyss ) / ( zsumsedsi + rtrn ) 
    272 #endif 
     291      IF( .NOT.lk_sed )  zrivsil =  1._wp - ( sumdepsi + rivdsiinput * r1_ryyss ) / ( zsumsedsi + rtrn ) 
    273292 
    274293      DO jj = 1, jpj 
     
    276295            ikt  = mbkt(ji,jj) 
    277296            zdep = xstep / e3t_n(ji,jj,ikt)  
    278             zws4 = zwsbio4(ji,jj) * zdep 
    279297            zwsc = zwscal (ji,jj) * zdep 
    280 # if defined key_kriest 
    281             zsiloss = trb(ji,jj,ikt,jpgsi) * zws4 
    282 # else 
    283298            zsiloss = trb(ji,jj,ikt,jpgsi) * zwsc 
    284 # endif 
    285299            zcaloss = trb(ji,jj,ikt,jpcal) * zwsc 
    286300            ! 
    287301            tra(ji,jj,ikt,jpgsi) = tra(ji,jj,ikt,jpgsi) - zsiloss 
    288302            tra(ji,jj,ikt,jpcal) = tra(ji,jj,ikt,jpcal) - zcaloss 
    289 #if ! defined key_sed 
    290             tra(ji,jj,ikt,jpsil) = tra(ji,jj,ikt,jpsil) + zsiloss * zrivsil  
    291             zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) 
    292             zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 
    293             zrivalk  =  1._wp - ( rivalkinput * r1_ryyss ) * zfactcal / ( zsumsedcal + rtrn ) 
    294             tra(ji,jj,ikt,jptal) =  tra(ji,jj,ikt,jptal) + zcaloss * zrivalk * 2.0 
    295             tra(ji,jj,ikt,jpdic) =  tra(ji,jj,ikt,jpdic) + zcaloss * zrivalk 
    296 #endif 
    297303         END DO 
    298304      END DO 
    299  
     305      ! 
     306      IF( .NOT.lk_sed ) THEN 
     307         DO jj = 1, jpj 
     308            DO ji = 1, jpi 
     309               ikt  = mbkt(ji,jj) 
     310               zdep = xstep / e3t_n(ji,jj,ikt)  
     311               zwsc = zwscal (ji,jj) * zdep 
     312               zsiloss = trb(ji,jj,ikt,jpgsi) * zwsc 
     313               zcaloss = trb(ji,jj,ikt,jpcal) * zwsc 
     314               tra(ji,jj,ikt,jpsil) = tra(ji,jj,ikt,jpsil) + zsiloss * zrivsil  
     315               ! 
     316               zfactcal = MIN( excess(ji,jj,ikt), 0.2 ) 
     317               zfactcal = MIN( 1., 1.3 * ( 0.2 - zfactcal ) / ( 0.4 - zfactcal ) ) 
     318               zrivalk  =  1._wp - ( rivalkinput * r1_ryyss ) * zfactcal / ( zsumsedcal + rtrn ) 
     319               tra(ji,jj,ikt,jptal) =  tra(ji,jj,ikt,jptal) + zcaloss * zrivalk * 2.0 
     320               tra(ji,jj,ikt,jpdic) =  tra(ji,jj,ikt,jpdic) + zcaloss * zrivalk 
     321               zsedcal(ji,jj) = (1.0 - zrivalk) * zcaloss / zdep 
     322               zsedsi (ji,jj) = (1.0 - zrivsil) * zsiloss / zdep 
     323            END DO 
     324         END DO 
     325      ENDIF 
     326      ! 
    300327      DO jj = 1, jpj 
    301328         DO ji = 1, jpi 
     
    304331            zws4 = zwsbio4(ji,jj) * zdep 
    305332            zws3 = zwsbio3(ji,jj) * zdep 
    306             zrivno3 = 1. - zbureff(ji,jj) 
    307 # if ! defined key_kriest 
    308333            tra(ji,jj,ikt,jpgoc) = tra(ji,jj,ikt,jpgoc) - trb(ji,jj,ikt,jpgoc) * zws4  
    309334            tra(ji,jj,ikt,jppoc) = tra(ji,jj,ikt,jppoc) - trb(ji,jj,ikt,jppoc) * zws3 
    310335            tra(ji,jj,ikt,jpbfe) = tra(ji,jj,ikt,jpbfe) - trb(ji,jj,ikt,jpbfe) * zws4 
    311336            tra(ji,jj,ikt,jpsfe) = tra(ji,jj,ikt,jpsfe) - trb(ji,jj,ikt,jpsfe) * zws3 
    312             zwstpoc              = trb(ji,jj,ikt,jpgoc) * zws4 + trb(ji,jj,ikt,jppoc) * zws3 
    313 # else 
    314             tra(ji,jj,ikt,jpnum) = tra(ji,jj,ikt,jpnum) - trb(ji,jj,ikt,jpnum) * zws4  
    315             tra(ji,jj,ikt,jppoc) = tra(ji,jj,ikt,jppoc) - trb(ji,jj,ikt,jppoc) * zws3 
    316             tra(ji,jj,ikt,jpsfe) = tra(ji,jj,ikt,jpsfe) - trb(ji,jj,ikt,jpsfe) * zws3 
    317             zwstpoc = trb(ji,jj,ikt,jppoc) * zws3  
    318 # endif 
    319  
    320 #if ! defined key_sed 
    321             ! The 0.5 factor in zpdenit and zdenitt is to avoid negative NO3 concentration after both denitrification 
    322             ! in the sediments and just above the sediments. Not very clever, but simpliest option. 
    323             zpdenit  = MIN( 0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 ) 
    324             z1pdenit = zwstpoc * zrivno3 - zpdenit 
    325             zolimit = MIN( ( trb(ji,jj,ikt,jpoxy) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) ) 
    326             zdenitt = MIN(  0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, z1pdenit * nitrfac(ji,jj,ikt) ) 
    327             tra(ji,jj,ikt,jpdoc) = tra(ji,jj,ikt,jpdoc) + z1pdenit - zolimit - zdenitt 
    328             tra(ji,jj,ikt,jppo4) = tra(ji,jj,ikt,jppo4) + zpdenit + zolimit + zdenitt 
    329             tra(ji,jj,ikt,jpnh4) = tra(ji,jj,ikt,jpnh4) + zpdenit + zolimit + zdenitt 
    330             tra(ji,jj,ikt,jpno3) = tra(ji,jj,ikt,jpno3) - rdenit * (zpdenit + zdenitt) 
    331             tra(ji,jj,ikt,jpoxy) = tra(ji,jj,ikt,jpoxy) - zolimit * o2ut 
    332             tra(ji,jj,ikt,jptal) = tra(ji,jj,ikt,jptal) + rno3 * (zolimit + (1.+rdenit) * (zpdenit + zdenitt) ) 
    333             tra(ji,jj,ikt,jpdic) = tra(ji,jj,ikt,jpdic) + zpdenit + zolimit + zdenitt 
    334             sdenit(ji,jj) = rdenit * zpdenit * e3t_n(ji,jj,ikt) 
    335 #endif 
    336337         END DO 
    337338      END DO 
     339      ! 
     340      IF( ln_ligand ) THEN 
     341         DO jj = 1, jpj 
     342            DO ji = 1, jpi 
     343               ikt     = mbkt(ji,jj) 
     344               zdep    = xstep / e3t_n(ji,jj,ikt)  
     345               zwssfep = zwsfep(ji,jj) * zdep 
     346               tra(ji,jj,ikt,jpfep) = tra(ji,jj,ikt,jpfep) - trb(ji,jj,ikt,jpfep) * zwssfep 
     347            END DO 
     348         END DO 
     349      ENDIF 
     350      ! 
     351      IF( ln_p5z ) THEN 
     352         DO jj = 1, jpj 
     353            DO ji = 1, jpi 
     354               ikt  = mbkt(ji,jj) 
     355               zdep = xstep / e3t_n(ji,jj,ikt)  
     356               zws4 = zwsbio4(ji,jj) * zdep 
     357               zws3 = zwsbio3(ji,jj) * zdep 
     358               tra(ji,jj,ikt,jpgon) = tra(ji,jj,ikt,jpgon) - trb(ji,jj,ikt,jpgon) * zws4 
     359               tra(ji,jj,ikt,jppon) = tra(ji,jj,ikt,jppon) - trb(ji,jj,ikt,jppon) * zws3 
     360               tra(ji,jj,ikt,jpgop) = tra(ji,jj,ikt,jpgop) - trb(ji,jj,ikt,jpgop) * zws4 
     361               tra(ji,jj,ikt,jppop) = tra(ji,jj,ikt,jppop) - trb(ji,jj,ikt,jppop) * zws3 
     362            END DO 
     363         END DO 
     364      ENDIF 
     365 
     366      IF( .NOT.lk_sed ) THEN 
     367         ! The 0.5 factor in zpdenit and zdenitt is to avoid negative NO3 concentration after both denitrification 
     368         ! in the sediments and just above the sediments. Not very clever, but simpliest option. 
     369         DO jj = 1, jpj 
     370            DO ji = 1, jpi 
     371               ikt  = mbkt(ji,jj) 
     372               zdep = xstep / e3t_n(ji,jj,ikt)  
     373               zws4 = zwsbio4(ji,jj) * zdep 
     374               zws3 = zwsbio3(ji,jj) * zdep 
     375               zrivno3 = 1. - zbureff(ji,jj) 
     376               zwstpoc = trb(ji,jj,ikt,jpgoc) * zws4 + trb(ji,jj,ikt,jppoc) * zws3 
     377               zpdenit  = MIN( 0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 ) 
     378               z1pdenit = zwstpoc * zrivno3 - zpdenit 
     379               zolimit = MIN( ( trb(ji,jj,ikt,jpoxy) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) ) 
     380               zdenitt = MIN(  0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, z1pdenit * nitrfac(ji,jj,ikt) ) 
     381               tra(ji,jj,ikt,jpdoc) = tra(ji,jj,ikt,jpdoc) + z1pdenit - zolimit - zdenitt 
     382               tra(ji,jj,ikt,jppo4) = tra(ji,jj,ikt,jppo4) + zpdenit + zolimit + zdenitt 
     383               tra(ji,jj,ikt,jpnh4) = tra(ji,jj,ikt,jpnh4) + zpdenit + zolimit + zdenitt 
     384               tra(ji,jj,ikt,jpno3) = tra(ji,jj,ikt,jpno3) - rdenit * (zpdenit + zdenitt) 
     385               tra(ji,jj,ikt,jpoxy) = tra(ji,jj,ikt,jpoxy) - zolimit * o2ut 
     386               tra(ji,jj,ikt,jptal) = tra(ji,jj,ikt,jptal) + rno3 * (zolimit + (1.+rdenit) * (zpdenit + zdenitt) ) 
     387               tra(ji,jj,ikt,jpdic) = tra(ji,jj,ikt,jpdic) + zpdenit + zolimit + zdenitt 
     388               sdenit(ji,jj) = rdenit * zpdenit * e3t_n(ji,jj,ikt) 
     389               zsedc(ji,jj)   = (1. - zrivno3) * zwstpoc / zdep 
     390               IF( ln_p5z ) THEN 
     391                  zwstpop              = trb(ji,jj,ikt,jpgop) * zws4 + trb(ji,jj,ikt,jppop) * zws3 
     392                  zwstpon              = trb(ji,jj,ikt,jpgon) * zws4 + trb(ji,jj,ikt,jppon) * zws3 
     393                  tra(ji,jj,ikt,jpdon) = tra(ji,jj,ikt,jpdon) + (z1pdenit - zolimit - zdenitt) * zwstpon / (zwstpoc + rtrn) 
     394                  tra(ji,jj,ikt,jpdop) = tra(ji,jj,ikt,jpdop) + (z1pdenit - zolimit - zdenitt) * zwstpop / (zwstpoc + rtrn) 
     395               ENDIF 
     396            END DO 
     397         END DO 
     398       ENDIF 
     399 
    338400 
    339401      ! Nitrogen fixation process 
     
    341403      !----------------------------------- 
    342404      DO jk = 1, jpkm1 
    343          DO jj = 1, jpj 
    344             DO ji = 1, jpi 
    345                !                      ! Potential nitrogen fixation dependant on temperature and iron 
    346                zlim = ( 1.- xnanono3(ji,jj,jk) - xnanonh4(ji,jj,jk) ) 
    347                IF( zlim <= 0.2 )   zlim = 0.01 
    348 #if defined key_degrad 
    349                zfact = zlim * rfact2 * facvol(ji,jj,jk) 
    350 #else 
    351                zfact = zlim * rfact2 
    352 #endif 
    353                ztrfer = biron(ji,jj,jk)       / ( concfediaz + biron(ji,jj,jk)       ) 
    354                ztrpo4 = trb  (ji,jj,jk,jppo4) / ( concnnh4   + trb  (ji,jj,jk,jppo4) )  
    355                zlight =  ( 1.- EXP( -etot_ndcy(ji,jj,jk) / diazolight ) )  
    356                nitrpot(ji,jj,jk) =  MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) * r1_rday )   & 
    357                  &         *  zfact * MIN( ztrfer, ztrpo4 ) * zlight 
    358                zsoufer(ji,jj,jk) = zlight * 2E-11 / (2E-11 + biron(ji,jj,jk)) 
    359             END DO 
    360          END DO 
    361       END DO 
     405         zlight (:,:,jk) =  ( 1.- EXP( -etot_ndcy(:,:,jk) / diazolight ) ) * ( 1. - fr_i(:,:) )  
     406         zsoufer(:,:,jk) = zlight(:,:,jk) * 2E-11 / ( 2E-11 + biron(:,:,jk) ) 
     407      ENDDO 
     408      IF( ln_p4z ) THEN 
     409         DO jk = 1, jpkm1 
     410            DO jj = 1, jpj 
     411               DO ji = 1, jpi 
     412                  !                      ! Potential nitrogen fixation dependant on temperature and iron 
     413                  zlim = ( 1.- xnanono3(ji,jj,jk) - xnanonh4(ji,jj,jk) ) 
     414                  IF( zlim <= 0.2 )   zlim = 0.01 
     415                  zfact = zlim * rfact2 
     416 
     417                  ztrfer  = biron(ji,jj,jk)       / ( concfediaz + biron(ji,jj,jk)       ) 
     418                  ztrpo4s = trb  (ji,jj,jk,jppo4) / ( concnnh4   + trb  (ji,jj,jk,jppo4) )  
     419                  nitrpot(ji,jj,jk) =  MAX( 0.e0, ( 0.6 * tgfunc(ji,jj,jk) - 2.15 ) * r1_rday ) & 
     420                    &                *  zfact * MIN( ztrfer, ztrpo4s ) * zlight(ji,jj,jk) 
     421               END DO 
     422            END DO 
     423         END DO 
     424      ELSE       ! p5z 
     425         DO jk = 1, jpkm1 
     426            DO jj = 1, jpj 
     427               DO ji = 1, jpi 
     428                  !                      ! Potential nitrogen fixation dependant on temperature and iron 
     429                  ztemp = tsn(ji,jj,jk,jp_tem) 
     430                  zmudia = MAX( 0.,-0.001096*ztemp**2 + 0.057*ztemp -0.637 ) * 7.625 
     431                  !       Potential nitrogen fixation dependant on temperature and iron 
     432                  xdianh4 = trb(ji,jj,jk,jpnh4) / ( concnnh4 + trb(ji,jj,jk,jpnh4) ) 
     433                  xdiano3 = trb(ji,jj,jk,jpno3) / ( concnno3 + trb(ji,jj,jk,jpno3) ) * (1. - xdianh4) 
     434                  zlim = ( 1.- xdiano3 - xdianh4 ) 
     435                  IF( zlim <= 0.1 )   zlim = 0.01 
     436                  zfact = zlim * rfact2 
     437                  ztrfer = biron(ji,jj,jk) / ( concfediaz + biron(ji,jj,jk) ) 
     438                  ztrpo4(ji,jj,jk) = trb(ji,jj,jk,jppo4) / ( 1E-6 + trb(ji,jj,jk,jppo4) ) 
     439                  ztrdop(ji,jj,jk) = trb(ji,jj,jk,jpdop) / ( 1E-6 + trb(ji,jj,jk,jpdop) ) * (1. - ztrpo4(ji,jj,jk)) 
     440                  ztrdp = ztrpo4(ji,jj,jk) + ztrdop(ji,jj,jk) 
     441                  nitrpot(ji,jj,jk) =  zmudia * r1_rday * zfact * MIN( ztrfer, ztrdp ) * zlight(ji,jj,jk) 
     442               END DO 
     443            END DO 
     444         END DO 
     445      ENDIF 
    362446 
    363447      ! Nitrogen change due to nitrogen fixation 
    364448      ! ---------------------------------------- 
    365       DO jk = 1, jpkm1 
    366          DO jj = 1, jpj 
    367             DO ji = 1, jpi 
    368                zfact = nitrpot(ji,jj,jk) * nitrfix 
    369                tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) +             zfact 
    370                tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3      * zfact 
    371                tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + o2nit     * zfact  
    372                tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + concdnh4 / ( concdnh4 + trb(ji,jj,jk,jppo4) ) & 
    373                &                     * 0.002 * trb(ji,jj,jk,jpdoc) * xstep 
    374                tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * xstep 
    375            END DO 
    376          END DO  
    377       END DO 
     449      IF( ln_p4z ) THEN 
     450         DO jk = 1, jpkm1 
     451            DO jj = 1, jpj 
     452               DO ji = 1, jpi 
     453                  zfact = nitrpot(ji,jj,jk) * nitrfix 
     454                  tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) +             zfact 
     455                  tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3      * zfact 
     456                  tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + o2nit     * zfact  
     457                  tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) + concdnh4 / ( concdnh4 + trb(ji,jj,jk,jppo4) ) & 
     458                  &                     * 0.002 * trb(ji,jj,jk,jpdoc) * xstep 
     459                  tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * xstep 
     460              END DO 
     461            END DO  
     462         END DO 
     463      ELSE    ! p5z 
     464         DO jk = 1, jpkm1 
     465            DO jj = 1, jpj 
     466               DO ji = 1, jpi 
     467                  zfact = nitrpot(ji,jj,jk) * nitrfix 
     468                  tra(ji,jj,jk,jpnh4) = tra(ji,jj,jk,jpnh4) + zfact / 3.0 
     469                  tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + rno3 * zfact / 3.0 
     470                  tra(ji,jj,jk,jppo4) = tra(ji,jj,jk,jppo4) - 16.0 / 46.0 * zfact * ( 1.0 - 1.0 / 3.0 ) & 
     471                  &                     * ztrpo4(ji,jj,jk) / (ztrpo4(ji,jj,jk) + ztrdop(ji,jj,jk) + rtrn) 
     472                  tra(ji,jj,jk,jpdon) = tra(ji,jj,jk,jpdon) + zfact * 1.0 / 3.0 
     473                  tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) + zfact * 1.0 / 3.0 
     474                  tra(ji,jj,jk,jpdop) = tra(ji,jj,jk,jpdop) + 16.0 / 46.0 * zfact / 3.0  & 
     475                  &                     - 16.0 / 46.0 * zfact * ztrdop(ji,jj,jk)   & 
     476                  &                     / (ztrpo4(ji,jj,jk) + ztrdop(ji,jj,jk) + rtrn) 
     477                  tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zfact * 1.0 / 3.0 * 2.0 / 3.0 
     478                  tra(ji,jj,jk,jppon) = tra(ji,jj,jk,jppon) + zfact * 1.0 / 3.0 * 2.0 /3.0 
     479                  tra(ji,jj,jk,jppop) = tra(ji,jj,jk,jppop) + 16.0 / 46.0 * zfact * 1.0 / 3.0 * 2.0 /3.0 
     480                  tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zfact * 1.0 / 3.0 * 1.0 / 3.0 
     481                  tra(ji,jj,jk,jpgon) = tra(ji,jj,jk,jpgon) + zfact * 1.0 / 3.0 * 1.0 /3.0 
     482                  tra(ji,jj,jk,jpgop) = tra(ji,jj,jk,jpgop) + 16.0 / 46.0 * zfact * 1.0 / 3.0 * 1.0 /3.0 
     483                  tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) + ( o2ut + o2nit ) * zfact * 2.0 / 3.0 + o2nit * zfact / 3.0 
     484                  tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) - 30E-6 * zfact * 1.0 / 3.0  
     485                  tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) + 30E-6 * zfact * 1.0 / 3.0 * 2.0 / 3.0 
     486                  tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + 30E-6 * zfact * 1.0 / 3.0 * 1.0 / 3.0 
     487                  tra(ji,jj,jk,jpfer) = tra(ji,jj,jk,jpfer) + 0.002 * 4E-10 * zsoufer(ji,jj,jk) * rfact2 / rday 
     488              END DO 
     489            END DO  
     490         END DO 
     491         ! 
     492      ENDIF 
    378493 
    379494      IF( lk_iomput ) THEN 
     
    388503               CALL iom_put( "INTNFIX" , zwork1 )  
    389504            ENDIF 
     505            IF( iom_use("SedCal" ) ) CALL iom_put( "SedCal", zsedcal(:,:) * 1.e+3 ) 
     506            IF( iom_use("SedSi" ) )  CALL iom_put( "SedSi",  zsedsi (:,:) * 1.e+3 ) 
     507            IF( iom_use("SedC" ) )   CALL iom_put( "SedC",   zsedc  (:,:) * 1.e+3 ) 
     508            IF( iom_use("Sdenit" ) ) CALL iom_put( "Sdenit", sdenit (:,:) * 1.e+3 * rno3 ) 
    390509         ENDIF 
    391       ELSE 
    392          IF( ln_diatrc )  & 
    393             &  trc2d(:,:,jp_pcs0_2d + 12) = nitrpot(:,:,1) * nitrfix * rno3 * 1.e+3 * rfact2r * e3t_n(:,:,1) * tmask(:,:,1) 
    394510      ENDIF 
    395511      ! 
     
    400516      ENDIF 
    401517      ! 
    402       CALL wrk_dealloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zbureff ) 
    403       CALL wrk_dealloc( jpi, jpj, zwsbio3, zwsbio4, zwscal ) 
    404       CALL wrk_dealloc( jpi, jpj, jpk, zsoufer ) 
     518                      CALL wrk_dealloc( jpi, jpj, zdenit2d, zwork1, zwork2, zwork3, zbureff ) 
     519                      CALL wrk_dealloc( jpi, jpj, zwsbio3, zwsbio4, zwscal ) 
     520                      CALL wrk_dealloc( jpi, jpj, zsedcal,  zsedsi, zsedc ) 
     521                      CALL wrk_dealloc( jpi, jpj, jpk, zlight, zsoufer ) 
     522      IF( ln_p5z )    CALL wrk_dealloc( jpi, jpj, jpk, ztrpo4, ztrdop ) 
     523      IF( ln_ligand ) CALL wrk_dealloc( jpi, jpj, zwsfep ) 
    405524      ! 
    406525      IF( nn_timing == 1 )  CALL timing_stop('p4z_sed') 
    407       ! 
    408  9100  FORMAT(i8,3f10.5) 
    409526      ! 
    410527   END SUBROUTINE p4z_sed 
     
    422539 
    423540 
    424 #else 
    425    !!====================================================================== 
    426    !!  Dummy module :                                   No PISCES bio-model 
    427    !!====================================================================== 
    428 CONTAINS 
    429    SUBROUTINE p4z_sed                         ! Empty routine 
    430    END SUBROUTINE p4z_sed 
    431 #endif  
    432  
    433541   !!====================================================================== 
    434542END MODULE p4zsed 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsink.F90

    r6140 r7403  
    99   !!             3.5  !  2012-07  (O. Aumont) Introduce potential time-splitting 
    1010   !!---------------------------------------------------------------------- 
    11 #if defined key_pisces 
    12    !!---------------------------------------------------------------------- 
    1311   !!   p4z_sink       :  Compute vertical flux of particulate matter due to gravitational sinking 
    1412   !!   p4z_sink_init  :  Unitialisation of sinking speed parameters 
     
    2927   PUBLIC   p4z_sink_alloc 
    3028 
    31    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   wsbio3   !: POC sinking speed  
    32    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   wsbio4   !: GOC sinking speed 
    33    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   wscal    !: Calcite and BSi sinking speeds 
    34  
    3529   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinking, sinking2  !: POC sinking fluxes  
    3630   !                                                          !  (different meanings depending on the parameterization) 
     31   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkingn, sinking2n  !: POC sinking fluxes  
     32   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkingp, sinking2p  !: POC sinking fluxes  
    3733   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkcal, sinksil   !: CaCO3 and BSi sinking fluxes 
    3834   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkfer            !: Small BFe sinking fluxes 
    39 #if ! defined key_kriest 
    4035   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkfer2           !: Big iron sinking fluxes 
    41 #endif 
     36   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sinkfep      !: Fep sinking fluxes 
    4237 
    4338   INTEGER  :: ik100 
    44  
    45 #if  defined key_kriest 
    46    REAL(wp) ::  xkr_sfact    !: Sinking factor 
    47    REAL(wp) ::  xkr_stick    !: Stickiness 
    48    REAL(wp) ::  xkr_nnano    !: Nbr of cell in nano size class 
    49    REAL(wp) ::  xkr_ndiat    !: Nbr of cell in diatoms size class 
    50    REAL(wp) ::  xkr_nmicro   !: Nbr of cell in microzoo size class 
    51    REAL(wp) ::  xkr_nmeso    !: Nbr of cell in mesozoo  size class 
    52    REAL(wp) ::  xkr_naggr    !: Nbr of cell in aggregates  size class 
    53  
    54    REAL(wp) ::  xkr_frac  
    55  
    56    REAL(wp), PUBLIC ::  xkr_dnano       !: Size of particles in nano pool 
    57    REAL(wp), PUBLIC ::  xkr_ddiat       !: Size of particles in diatoms pool 
    58    REAL(wp), PUBLIC ::  xkr_dmicro      !: Size of particles in microzoo pool 
    59    REAL(wp), PUBLIC ::  xkr_dmeso       !: Size of particles in mesozoo pool 
    60    REAL(wp), PUBLIC ::  xkr_daggr       !: Size of particles in aggregates pool 
    61    REAL(wp), PUBLIC ::  xkr_wsbio_min   !: min vertical particle speed 
    62    REAL(wp), PUBLIC ::  xkr_wsbio_max   !: max vertical particle speed 
    63  
    64    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) ::   xnumm   !:  maximum number of particles in aggregates 
    65 #endif 
    6639 
    6740   !!---------------------------------------------------------------------- 
     
    7245CONTAINS 
    7346 
    74 #if ! defined key_kriest 
    7547   !!---------------------------------------------------------------------- 
    7648   !!   'standard sinking parameterisation'                  ??? 
     
    9163      REAL(wp) ::   zagg1, zagg2, zagg3, zagg4 
    9264      REAL(wp) ::   zagg , zaggfe, zaggdoc, zaggdoc2, zaggdoc3 
    93       REAL(wp) ::   zfact, zwsmax, zmax, zstep 
     65      REAL(wp) ::   zfact, zwsmax, zmax 
    9466      CHARACTER (len=25) :: charout 
    9567      REAL(wp), POINTER, DIMENSION(:,:,:) :: zw3d 
     
    9870      ! 
    9971      IF( nn_timing == 1 )  CALL timing_start('p4z_sink') 
     72 
     73 
     74      ! Initialization of some global variables 
     75      ! --------------------------------------- 
     76      prodpoc(:,:,:) = 0. 
     77      conspoc(:,:,:) = 0. 
     78      prodgoc(:,:,:) = 0. 
     79      consgoc(:,:,:) = 0. 
     80 
    10081      ! 
    10182      !    Sinking speeds of detritus is increased with depth as shown 
     
    10586         DO jj = 1, jpj 
    10687            DO ji = 1,jpi 
    107                zmax  = MAX( heup(ji,jj), hmld(ji,jj) ) 
    108                zfact = MAX( 0., gdepw_n(ji,jj,jk+1) - zmax ) / 5000._wp 
    109                wsbio4(ji,jj,jk) = wsbio2 + ( 200.- wsbio2 ) * zfact 
     88               zmax  = MAX( heup_01(ji,jj), hmld(ji,jj) ) 
     89               zfact = MAX( 0., gdepw_n(ji,jj,jk+1) - zmax ) / wsbio2scale 
     90               wsbio4(ji,jj,jk) = wsbio2 + MAX(0., ( wsbio2max - wsbio2 )) * zfact 
    11091            END DO 
    11192         END DO 
     
    11495      ! limit the values of the sinking speeds to avoid numerical instabilities   
    11596      wsbio3(:,:,:) = wsbio 
    116       wscal (:,:,:) = wsbio4(:,:,:) 
     97 
    11798      ! 
    11899      ! OA This is (I hope) a temporary solution for the problem that may  
     
    155136               IF( tmask(ji,jj,jk) == 1 ) THEN 
    156137                 zwsmax = 0.5 * e3t_n(ji,jj,jk) / xstep 
    157                  wsbio3(ji,jj,jk) = MIN( wsbio3(ji,jj,jk), zwsmax * FLOAT( iiter1 ) ) 
    158                  wsbio4(ji,jj,jk) = MIN( wsbio4(ji,jj,jk), zwsmax * FLOAT( iiter2 ) ) 
     138                 wsbio3(ji,jj,jk) = MIN( wsbio3(ji,jj,jk), zwsmax * REAL( iiter1, wp ) ) 
     139                 wsbio4(ji,jj,jk) = MIN( wsbio4(ji,jj,jk), zwsmax * REAL( iiter2, wp ) ) 
    159140               ENDIF 
    160141            END DO 
    161142         END DO 
    162143      END DO 
     144 
     145      wscal (:,:,:) = wsbio4(:,:,:) 
    163146 
    164147      !  Initializa to zero all the sinking arrays  
     
    185168      END DO 
    186169 
    187       !  Exchange between organic matter compartments due to coagulation/disaggregation 
    188       !  --------------------------------------------------- 
    189       DO jk = 1, jpkm1 
    190          DO jj = 1, jpj 
    191             DO ji = 1, jpi 
    192                ! 
    193                zstep = xstep  
    194 # if defined key_degrad 
    195                zstep = zstep * facvol(ji,jj,jk) 
    196 # endif 
    197                zfact = zstep * xdiss(ji,jj,jk) 
    198                !  Part I : Coagulation dependent on turbulence 
    199                zagg1 = 25.9  * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) 
    200                zagg2 = 4452. * zfact * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 
    201  
    202                ! Part II : Differential settling 
    203  
    204                !  Aggregation of small into large particles 
    205                zagg3 =  47.1 * zstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpgoc) 
    206                zagg4 =  3.3  * zstep * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jppoc) 
    207  
    208                zagg   = zagg1 + zagg2 + zagg3 + zagg4 
    209                zaggfe = zagg * trb(ji,jj,jk,jpsfe) / ( trb(ji,jj,jk,jppoc) + rtrn ) 
    210  
    211                ! Aggregation of DOC to POC :  
    212                ! 1st term is shear aggregation of DOC-DOC 
    213                ! 2nd term is shear aggregation of DOC-POC 
    214                ! 3rd term is differential settling of DOC-POC 
    215                zaggdoc  = ( ( 0.369 * 0.3 * trb(ji,jj,jk,jpdoc) + 102.4 * trb(ji,jj,jk,jppoc) ) * zfact       & 
    216                &            + 2.4 * zstep * trb(ji,jj,jk,jppoc) ) * 0.3 * trb(ji,jj,jk,jpdoc) 
    217                ! transfer of DOC to GOC :  
    218                ! 1st term is shear aggregation 
    219                ! 2nd term is differential settling  
    220                zaggdoc2 = ( 3.53E3 * zfact + 0.1 * zstep ) * trb(ji,jj,jk,jpgoc) * 0.3 * trb(ji,jj,jk,jpdoc) 
    221                ! tranfer of DOC to POC due to brownian motion 
    222                zaggdoc3 =  ( 5095. * trb(ji,jj,jk,jppoc) + 114. * 0.3 * trb(ji,jj,jk,jpdoc) ) *zstep * 0.3 * trb(ji,jj,jk,jpdoc) 
    223  
    224                !  Update the trends 
    225                tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) - zagg + zaggdoc + zaggdoc3 
    226                tra(ji,jj,jk,jpgoc) = tra(ji,jj,jk,jpgoc) + zagg + zaggdoc2 
    227                tra(ji,jj,jk,jpsfe) = tra(ji,jj,jk,jpsfe) - zaggfe 
    228                tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zaggfe 
    229                tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zaggdoc - zaggdoc2 - zaggdoc3 
    230                ! 
    231             END DO 
    232          END DO 
    233       END DO 
    234  
     170      IF( ln_p5z ) THEN 
     171         sinkingn (:,:,:) = 0.e0 
     172         sinking2n(:,:,:) = 0.e0 
     173         sinkingp (:,:,:) = 0.e0 
     174         sinking2p(:,:,:) = 0.e0 
     175 
     176         !   Compute the sedimentation term using p4zsink2 for all the sinking particles 
     177         !   ----------------------------------------------------- 
     178         DO jit = 1, iiter1 
     179           CALL p4z_sink2( wsbio3, sinkingn , jppon, iiter1 ) 
     180           CALL p4z_sink2( wsbio3, sinkingp , jppop, iiter1 ) 
     181         END DO 
     182 
     183         DO jit = 1, iiter2 
     184           CALL p4z_sink2( wsbio4, sinking2n, jpgon, iiter2 ) 
     185           CALL p4z_sink2( wsbio4, sinking2p, jpgop, iiter2 ) 
     186         END DO 
     187      ENDIF 
     188 
     189      IF( ln_ligand ) THEN 
     190         wsfep (:,:,:) = wfep 
     191         DO jk = 1,jpkm1 
     192            DO jj = 1, jpj 
     193               DO ji = 1, jpi 
     194                  IF( tmask(ji,jj,jk) == 1 ) THEN 
     195                    zwsmax = 0.5 * e3t_n(ji,jj,jk) / xstep 
     196                    wsfep(ji,jj,jk) = MIN( wsfep(ji,jj,jk), zwsmax * REAL( iiter1, wp ) ) 
     197                  ENDIF 
     198               END DO 
     199            END DO 
     200         END DO 
     201         ! 
     202         sinkfep(:,:,:) = 0.e0 
     203         DO jit = 1, iiter1 
     204           CALL p4z_sink2( wsfep, sinkfep , jpfep, iiter1 ) 
     205         END DO 
     206      ENDIF 
    235207 
    236208     ! Total carbon export per year 
     
    281253          CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
    282254        ENDIF 
    283       ELSE 
    284          IF( ln_diatrc ) THEN 
    285             zfact = 1.e3 * rfact2r 
    286             trc2d(:,:,jp_pcs0_2d + 4) = sinking (:,:,ik100) * zfact * tmask(:,:,1) 
    287             trc2d(:,:,jp_pcs0_2d + 5) = sinking2(:,:,ik100) * zfact * tmask(:,:,1) 
    288             trc2d(:,:,jp_pcs0_2d + 6) = sinkfer (:,:,ik100) * zfact * tmask(:,:,1) 
    289             trc2d(:,:,jp_pcs0_2d + 7) = sinkfer2(:,:,ik100) * zfact * tmask(:,:,1) 
    290             trc2d(:,:,jp_pcs0_2d + 8) = sinksil (:,:,ik100) * zfact * tmask(:,:,1) 
    291             trc2d(:,:,jp_pcs0_2d + 9) = sinkcal (:,:,ik100) * zfact * tmask(:,:,1) 
    292          ENDIF 
    293255      ENDIF 
    294256      ! 
     
    320282      ! 
    321283   END SUBROUTINE p4z_sink_init 
    322  
    323 #else 
    324    !!---------------------------------------------------------------------- 
    325    !!   'Kriest sinking parameterisation'        key_kriest          ??? 
    326    !!---------------------------------------------------------------------- 
    327  
    328    SUBROUTINE p4z_sink ( kt, knt ) 
    329       !!--------------------------------------------------------------------- 
    330       !!                ***  ROUTINE p4z_sink  *** 
    331       !! 
    332       !! ** Purpose :   Compute vertical flux of particulate matter due to 
    333       !!              gravitational sinking - Kriest parameterization 
    334       !! 
    335       !! ** Method  : - ??? 
    336       !!--------------------------------------------------------------------- 
    337       ! 
    338       INTEGER, INTENT(in) :: kt, knt 
    339       ! 
    340       INTEGER  :: ji, jj, jk, jit, niter1, niter2 
    341       REAL(wp) :: zagg1, zagg2, zagg3, zagg4, zagg5, zfract, zaggsi, zaggsh 
    342       REAL(wp) :: zagg , zaggdoc, zaggdoc1, znumdoc 
    343       REAL(wp) :: znum , zeps, zfm, zgm, zsm 
    344       REAL(wp) :: zdiv , zdiv1, zdiv2, zdiv3, zdiv4, zdiv5 
    345       REAL(wp) :: zval1, zval2, zval3, zval4 
    346       REAL(wp) :: zfact 
    347       INTEGER  :: ik1 
    348       CHARACTER (len=25) :: charout 
    349       REAL(wp), POINTER, DIMENSION(:,:,:) :: znum3d  
    350       REAL(wp), POINTER, DIMENSION(:,:,:) :: zw3d 
    351       REAL(wp), POINTER, DIMENSION(:,:  ) :: zw2d 
    352       !!--------------------------------------------------------------------- 
    353       ! 
    354       IF( nn_timing == 1 )  CALL timing_start('p4z_sink') 
    355       ! 
    356       CALL wrk_alloc( jpi, jpj, jpk, znum3d ) 
    357       ! 
    358       !     Initialisation of variables used to compute Sinking Speed 
    359       !     --------------------------------------------------------- 
    360  
    361       znum3d(:,:,:) = 0.e0 
    362       zval1 = 1. + xkr_zeta 
    363       zval2 = 1. + xkr_zeta + xkr_eta 
    364       zval3 = 1. + xkr_eta 
    365  
    366       !     Computation of the vertical sinking speed : Kriest et Evans, 2000 
    367       !     ----------------------------------------------------------------- 
    368  
    369       DO jk = 1, jpkm1 
    370          DO jj = 1, jpj 
    371             DO ji = 1, jpi 
    372                IF( tmask(ji,jj,jk) /= 0.e0 ) THEN 
    373                   znum = trb(ji,jj,jk,jppoc) / ( trb(ji,jj,jk,jpnum) + rtrn ) / xkr_massp 
    374                   ! -------------- To avoid sinking speed over 50 m/day ------- 
    375                   znum  = MIN( xnumm(jk), znum ) 
    376                   znum  = MAX( 1.1      , znum ) 
    377                   znum3d(ji,jj,jk) = znum 
    378                   !------------------------------------------------------------ 
    379                   zeps  = ( zval1 * znum - 1. )/ ( znum - 1. ) 
    380                   zfm   = xkr_frac**( 1. - zeps ) 
    381                   zgm   = xkr_frac**( zval1 - zeps ) 
    382                   zdiv  = MAX( 1.e-4, ABS( zeps - zval2 ) ) * SIGN( 1., ( zeps - zval2 ) ) 
    383                   zdiv1 = zeps - zval3 
    384                   wsbio3(ji,jj,jk) = xkr_wsbio_min * ( zeps - zval1 ) / zdiv    & 
    385                      &             - xkr_wsbio_max *   zgm * xkr_eta  / zdiv 
    386                   wsbio4(ji,jj,jk) = xkr_wsbio_min *   ( zeps-1. )    / zdiv1   & 
    387                      &             - xkr_wsbio_max *   zfm * xkr_eta  / zdiv1 
    388                   IF( znum == 1.1)   wsbio3(ji,jj,jk) = wsbio4(ji,jj,jk) 
    389                ENDIF 
    390             END DO 
    391          END DO 
    392       END DO 
    393  
    394       wscal(:,:,:) = MAX( wsbio3(:,:,:), 30._wp ) 
    395  
    396       !   INITIALIZE TO ZERO ALL THE SINKING ARRAYS 
    397       !   ----------------------------------------- 
    398  
    399       sinking (:,:,:) = 0.e0 
    400       sinking2(:,:,:) = 0.e0 
    401       sinkcal (:,:,:) = 0.e0 
    402       sinkfer (:,:,:) = 0.e0 
    403       sinksil (:,:,:) = 0.e0 
    404  
    405      !   Compute the sedimentation term using p4zsink2 for all the sinking particles 
    406      !   ----------------------------------------------------- 
    407  
    408       niter1 = niter1max 
    409       niter2 = niter2max 
    410  
    411       DO jit = 1, niter1 
    412         CALL p4z_sink2( wsbio3, sinking , jppoc, niter1 ) 
    413         CALL p4z_sink2( wsbio3, sinkfer , jpsfe, niter1 ) 
    414         CALL p4z_sink2( wscal , sinksil , jpgsi, niter1 ) 
    415         CALL p4z_sink2( wscal , sinkcal , jpcal, niter1 ) 
    416       END DO 
    417  
    418       DO jit = 1, niter2 
    419         CALL p4z_sink2( wsbio4, sinking2, jpnum, niter2 ) 
    420       END DO 
    421  
    422      !  Exchange between organic matter compartments due to coagulation/disaggregation 
    423      !  --------------------------------------------------- 
    424  
    425       zval1 = 1. + xkr_zeta 
    426       zval2 = 1. + xkr_eta 
    427       zval3 = 3. + xkr_eta 
    428       zval4 = 4. + xkr_eta 
    429  
    430       DO jk = 1,jpkm1 
    431          DO jj = 1,jpj 
    432             DO ji = 1,jpi 
    433                IF( tmask(ji,jj,jk) /= 0.e0 ) THEN 
    434  
    435                   znum = trb(ji,jj,jk,jppoc)/(trb(ji,jj,jk,jpnum)+rtrn) / xkr_massp 
    436                   !-------------- To avoid sinking speed over 50 m/day ------- 
    437                   znum  = min(xnumm(jk),znum) 
    438                   znum  = MAX( 1.1,znum) 
    439                   !------------------------------------------------------------ 
    440                   zeps  = ( zval1 * znum - 1.) / ( znum - 1.) 
    441                   zdiv  = MAX( 1.e-4, ABS( zeps - zval3) ) * SIGN( 1., zeps - zval3 ) 
    442                   zdiv1 = MAX( 1.e-4, ABS( zeps - 4.   ) ) * SIGN( 1., zeps - 4.    ) 
    443                   zdiv2 = zeps - 2. 
    444                   zdiv3 = zeps - 3. 
    445                   zdiv4 = zeps - zval2 
    446                   zdiv5 = 2.* zeps - zval4 
    447                   zfm   = xkr_frac**( 1.- zeps ) 
    448                   zsm   = xkr_frac**xkr_eta 
    449  
    450                   !    Part I : Coagulation dependant on turbulence 
    451                   !    ---------------------------------------------- 
    452  
    453                   zagg1 =  0.163 * trb(ji,jj,jk,jpnum)**2               & 
    454                      &            * 2.*( (zfm-1.)*(zfm*xkr_mass_max**3-xkr_mass_min**3)    & 
    455                      &            * (zeps-1)/zdiv1 + 3.*(zfm*xkr_mass_max-xkr_mass_min)    & 
    456                      &            * (zfm*xkr_mass_max**2-xkr_mass_min**2)                  & 
    457                      &            * (zeps-1.)**2/(zdiv2*zdiv3))  
    458                   zagg2 =  2*0.163*trb(ji,jj,jk,jpnum)**2*zfm*                       & 
    459                      &                   ((xkr_mass_max**3+3.*(xkr_mass_max**2          & 
    460                      &                    *xkr_mass_min*(zeps-1.)/zdiv2                 & 
    461                      &                    +xkr_mass_max*xkr_mass_min**2*(zeps-1.)/zdiv3)    & 
    462                      &                    +xkr_mass_min**3*(zeps-1)/zdiv1)                  & 
    463                      &                    -zfm*xkr_mass_max**3*(1.+3.*((zeps-1.)/           & 
    464                      &                    (zeps-2.)+(zeps-1.)/zdiv3)+(zeps-1.)/zdiv1))     
    465  
    466                   zagg3 =  0.163*trb(ji,jj,jk,jpnum)**2*zfm**2*8. * xkr_mass_max**3   
    467                    
    468                  !    Aggregation of small into large particles 
    469                  !    Part II : Differential settling 
    470                  !    ---------------------------------------------- 
    471  
    472                   zagg4 =  2.*3.141*0.125*trb(ji,jj,jk,jpnum)**2*                       & 
    473                      &                 xkr_wsbio_min*(zeps-1.)**2                         & 
    474                      &                 *(xkr_mass_min**2*((1.-zsm*zfm)/(zdiv3*zdiv4)      & 
    475                      &                 -(1.-zfm)/(zdiv*(zeps-1.)))-                       & 
    476                      &                 ((zfm*zfm*xkr_mass_max**2*zsm-xkr_mass_min**2)     & 
    477                      &                 *xkr_eta)/(zdiv*zdiv3*zdiv5) )    
    478  
    479                   zagg5 =   2.*3.141*0.125*trb(ji,jj,jk,jpnum)**2                         & 
    480                      &                 *(zeps-1.)*zfm*xkr_wsbio_min                        & 
    481                      &                 *(zsm*(xkr_mass_min**2-zfm*xkr_mass_max**2)         & 
    482                      &                 /zdiv3-(xkr_mass_min**2-zfm*zsm*xkr_mass_max**2)    & 
    483                      &                 /zdiv)   
    484  
    485                   ! 
    486                   !     Fractionnation by swimming organisms 
    487                   !     ------------------------------------ 
    488  
    489                   zfract = 2.*3.141*0.125*trb(ji,jj,jk,jpmes)*12./0.12/0.06**3*trb(ji,jj,jk,jpnum)  & 
    490                     &      * (0.01/xkr_mass_min)**(1.-zeps)*0.1**2  & 
    491                     &      * 10000.*xstep 
    492  
    493                   !     Aggregation of DOC to small particles 
    494                   !     -------------------------------------- 
    495  
    496                   zaggdoc = 0.83 * trb(ji,jj,jk,jpdoc) * xstep * xdiss(ji,jj,jk) * trb(ji,jj,jk,jpdoc)   & 
    497                      &        + 0.005 * 231. * trb(ji,jj,jk,jpdoc) * xstep * trb(ji,jj,jk,jpdoc) 
    498                   zaggdoc1 = 271. * trb(ji,jj,jk,jppoc) * xstep * xdiss(ji,jj,jk) * trb(ji,jj,jk,jpdoc)  & 
    499                      &  + 0.02 * 16706. * trb(ji,jj,jk,jppoc) * xstep * trb(ji,jj,jk,jpdoc) 
    500  
    501 # if defined key_degrad 
    502                    zagg1   = zagg1   * facvol(ji,jj,jk)                  
    503                    zagg2   = zagg2   * facvol(ji,jj,jk)                  
    504                    zagg3   = zagg3   * facvol(ji,jj,jk)                  
    505                    zagg4   = zagg4   * facvol(ji,jj,jk)                  
    506                    zagg5   = zagg5   * facvol(ji,jj,jk)                  
    507                    zaggdoc = zaggdoc * facvol(ji,jj,jk)                  
    508                    zaggdoc1 = zaggdoc1 * facvol(ji,jj,jk) 
    509 # endif 
    510                   zaggsh = ( zagg1 + zagg2 + zagg3 ) * rfact2 * xdiss(ji,jj,jk) / 1000. 
    511                   zaggsi = ( zagg4 + zagg5 ) * xstep / 10. 
    512                   zagg = 0.5 * xkr_stick * ( zaggsh + zaggsi ) 
    513                   ! 
    514                   znumdoc = trb(ji,jj,jk,jpnum) / ( trb(ji,jj,jk,jppoc) + rtrn ) 
    515                   tra(ji,jj,jk,jppoc) = tra(ji,jj,jk,jppoc) + zaggdoc + zaggdoc1 
    516                   tra(ji,jj,jk,jpnum) = tra(ji,jj,jk,jpnum) + zfract + zaggdoc / xkr_massp - zagg 
    517                   tra(ji,jj,jk,jpdoc) = tra(ji,jj,jk,jpdoc) - zaggdoc - zaggdoc1 
    518  
    519                ENDIF 
    520             END DO 
    521          END DO 
    522       END DO 
    523  
    524      ! Total primary production per year 
    525      t_oce_co2_exp = t_oce_co2_exp + glob_sum( ( sinking(:,:,ik100) * e1e2t(:,:) * tmask(:,:,1) ) 
    526      ! 
    527      IF( lk_iomput ) THEN 
    528         IF( knt == nrdttrc ) THEN 
    529           CALL wrk_alloc( jpi, jpj,      zw2d ) 
    530           CALL wrk_alloc( jpi, jpj, jpk, zw3d ) 
    531           zfact = 1.e+3 * rfact2r  !  conversion from mol/l/kt to  mol/m3/s 
    532           ! 
    533           IF( iom_use( "EPC100" ) )  THEN 
    534               zw2d(:,:) = sinking(:,:,ik100) * zfact * tmask(:,:,1) ! Export of carbon at 100m 
    535               CALL iom_put( "EPC100"  , zw2d ) 
    536           ENDIF 
    537           IF( iom_use( "EPN100" ) )  THEN 
    538               zw2d(:,:) = sinking2(:,:,ik100) * zfact * tmask(:,:,1) ! Export of number of aggregates ? 
    539               CALL iom_put( "EPN100"  , zw2d ) 
    540           ENDIF 
    541           IF( iom_use( "EPCAL100" ) )  THEN 
    542               zw2d(:,:) = sinkcal(:,:,ik100) * zfact * tmask(:,:,1) ! Export of calcite at 100m 
    543               CALL iom_put( "EPCAL100"  , zw2d ) 
    544           ENDIF 
    545           IF( iom_use( "EPSI100" ) )  THEN 
    546               zw2d(:,:) = sinksil(:,:,ik100) * zfact * tmask(:,:,1) ! Export of bigenic silica at 100m 
    547               CALL iom_put( "EPSI100"  , zw2d ) 
    548           ENDIF 
    549           IF( iom_use( "EXPC" ) )  THEN 
    550               zw3d(:,:,:) = sinking(:,:,:) * zfact * tmask(:,:,:) ! Export of carbon in the water column 
    551               CALL iom_put( "EXPC"  , zw3d ) 
    552           ENDIF 
    553           IF( iom_use( "EXPN" ) )  THEN 
    554               zw3d(:,:,:) = sinking(:,:,:) * zfact * tmask(:,:,:) ! Export of carbon in the water column 
    555               CALL iom_put( "EXPN"  , zw3d ) 
    556           ENDIF 
    557           IF( iom_use( "EXPCAL" ) )  THEN 
    558               zw3d(:,:,:) = sinkcal(:,:,:) * zfact * tmask(:,:,:) ! Export of calcite  
    559               CALL iom_put( "EXPCAL"  , zw3d ) 
    560           ENDIF 
    561           IF( iom_use( "EXPSI" ) )  THEN 
    562               zw3d(:,:,:) = sinksil(:,:,:) * zfact * tmask(:,:,:) ! Export of bigenic silica 
    563               CALL iom_put( "EXPSI"  , zw3d ) 
    564           ENDIF 
    565           IF( iom_use( "XNUM" ) )  THEN 
    566               zw3d(:,:,:) =  znum3d(:,:,:) * tmask(:,:,:) !  Number of particles on aggregats 
    567               CALL iom_put( "XNUM"  , zw3d ) 
    568           ENDIF 
    569           IF( iom_use( "WSC" ) )  THEN 
    570               zw3d(:,:,:) = wsbio3(:,:,:) * tmask(:,:,:) ! Sinking speed of carbon particles 
    571               CALL iom_put( "WSC"  , zw3d ) 
    572           ENDIF 
    573           IF( iom_use( "WSN" ) )  THEN 
    574               zw3d(:,:,:) = wsbio4(:,:,:) * tmask(:,:,:) ! Sinking speed of particles number 
    575               CALL iom_put( "WSN"  , zw3d ) 
    576           ENDIF 
    577           ! 
    578           CALL wrk_dealloc( jpi, jpj,      zw2d ) 
    579           CALL wrk_dealloc( jpi, jpj, jpk, zw3d ) 
    580       ELSE 
    581          IF( ln_diatrc ) THEN 
    582             zfact = 1.e3 * rfact2r 
    583             trc2d(:,:  ,jp_pcs0_2d + 4)  = sinking (:,:,ik100)  * zfact * tmask(:,:,1) 
    584             trc2d(:,:  ,jp_pcs0_2d + 5)  = sinking2(:,:,ik100)  * zfact * tmask(:,:,1) 
    585             trc2d(:,:  ,jp_pcs0_2d + 6)  = sinkfer (:,:,ik100)  * zfact * tmask(:,:,1) 
    586             trc2d(:,:  ,jp_pcs0_2d + 7)  = sinksil (:,:,ik100)  * zfact * tmask(:,:,1) 
    587             trc2d(:,:  ,jp_pcs0_2d + 8)  = sinkcal (:,:,ik100)  * zfact * tmask(:,:,1) 
    588             trc3d(:,:,:,jp_pcs0_3d + 11) = sinking (:,:,:)      * zfact * tmask(:,:,:) 
    589             trc3d(:,:,:,jp_pcs0_3d + 12) = sinking2(:,:,:)      * zfact * tmask(:,:,:) 
    590             trc3d(:,:,:,jp_pcs0_3d + 13) = sinksil (:,:,:)      * zfact * tmask(:,:,:) 
    591             trc3d(:,:,:,jp_pcs0_3d + 14) = sinkcal (:,:,:)      * zfact * tmask(:,:,:) 
    592             trc3d(:,:,:,jp_pcs0_3d + 15) = znum3d  (:,:,:)              * tmask(:,:,:) 
    593             trc3d(:,:,:,jp_pcs0_3d + 16) = wsbio3  (:,:,:)              * tmask(:,:,:) 
    594             trc3d(:,:,:,jp_pcs0_3d + 17) = wsbio4  (:,:,:)              * tmask(:,:,:) 
    595          ENDIF 
    596       ENDIF 
    597  
    598       ! 
    599       IF(ln_ctl)   THEN  ! print mean trends (used for debugging) 
    600          WRITE(charout, FMT="('sink')") 
    601          CALL prt_ctl_trc_info(charout) 
    602          CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 
    603       ENDIF 
    604       ! 
    605       CALL wrk_dealloc( jpi, jpj, jpk, znum3d ) 
    606       ! 
    607       IF( nn_timing == 1 )  CALL timing_stop('p4z_sink') 
    608       ! 
    609    END SUBROUTINE p4z_sink 
    610  
    611  
    612    SUBROUTINE p4z_sink_init 
    613       !!---------------------------------------------------------------------- 
    614       !!                  ***  ROUTINE p4z_sink_init  *** 
    615       !! 
    616       !! ** Purpose :   Initialization of sinking parameters 
    617       !!                Kriest parameterization only 
    618       !! 
    619       !! ** Method  :   Read the nampiskrs namelist and check the parameters 
    620       !!      called at the first timestep  
    621       !! 
    622       !! ** input   :   Namelist nampiskrs 
    623       !!---------------------------------------------------------------------- 
    624       INTEGER  ::   jk, jn, kiter 
    625       INTEGER  ::   ios                 ! Local integer output status for namelist read 
    626       REAL(wp) ::   znum, zdiv 
    627       REAL(wp) ::   zws, zwr, zwl,wmax, znummax 
    628       REAL(wp) ::   zmin, zmax, zl, zr, xacc 
    629       ! 
    630       NAMELIST/nampiskrs/ xkr_sfact, xkr_stick ,  & 
    631          &                xkr_nnano, xkr_ndiat, xkr_nmicro, xkr_nmeso, xkr_naggr 
    632       !!---------------------------------------------------------------------- 
    633       ! 
    634       IF( nn_timing == 1 )  CALL timing_start('p4z_sink_init') 
    635       ! 
    636  
    637       REWIND( numnatp_ref )              ! Namelist nampiskrs in reference namelist : Pisces sinking Kriest 
    638       READ  ( numnatp_ref, nampiskrs, IOSTAT = ios, ERR = 901) 
    639 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiskrs in reference namelist', lwp ) 
    640  
    641       REWIND( numnatp_cfg )              ! Namelist nampiskrs in configuration namelist : Pisces sinking Kriest 
    642       READ  ( numnatp_cfg, nampiskrs, IOSTAT = ios, ERR = 902 ) 
    643 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiskrs in configuration namelist', lwp ) 
    644       IF(lwm) WRITE ( numonp, nampiskrs ) 
    645  
    646       IF(lwp) THEN 
    647          WRITE(numout,*) 
    648          WRITE(numout,*) ' Namelist : nampiskrs' 
    649          WRITE(numout,*) '    Sinking factor                           xkr_sfact    = ', xkr_sfact 
    650          WRITE(numout,*) '    Stickiness                               xkr_stick    = ', xkr_stick 
    651          WRITE(numout,*) '    Nbr of cell in nano size class           xkr_nnano    = ', xkr_nnano 
    652          WRITE(numout,*) '    Nbr of cell in diatoms size class        xkr_ndiat    = ', xkr_ndiat 
    653          WRITE(numout,*) '    Nbr of cell in microzoo size class       xkr_nmicro   = ', xkr_nmicro 
    654          WRITE(numout,*) '    Nbr of cell in mesozoo size class        xkr_nmeso    = ', xkr_nmeso 
    655          WRITE(numout,*) '    Nbr of cell in aggregates size class     xkr_naggr    = ', xkr_naggr 
    656       ENDIF 
    657  
    658  
    659       ! max and min vertical particle speed 
    660       xkr_wsbio_min = xkr_sfact * xkr_mass_min**xkr_eta 
    661       xkr_wsbio_max = xkr_sfact * xkr_mass_max**xkr_eta 
    662       IF (lwp) WRITE(numout,*) ' max and min vertical particle speed ', xkr_wsbio_min, xkr_wsbio_max 
    663  
    664       ! 
    665       !    effect of the sizes of the different living pools on particle numbers 
    666       !    nano = 2um-20um -> mean size=6.32 um -> ws=2.596 -> xnum=xnnano=2.337 
    667       !    diat and microzoo = 10um-200um -> 44.7 -> 8.732 -> xnum=xndiat=3.718 
    668       !    mesozoo = 200um-2mm -> 632.45 -> 45.14 -> xnum=xnmeso=7.147 
    669       !    aggregates = 200um-10mm -> 1414 -> 74.34 -> xnum=xnaggr=9.877 
    670       !    doc aggregates = 1um 
    671       ! ---------------------------------------------------------- 
    672  
    673       xkr_dnano = 1. / ( xkr_massp * xkr_nnano ) 
    674       xkr_ddiat = 1. / ( xkr_massp * xkr_ndiat ) 
    675       xkr_dmicro = 1. / ( xkr_massp * xkr_nmicro ) 
    676       xkr_dmeso = 1. / ( xkr_massp * xkr_nmeso ) 
    677       xkr_daggr = 1. / ( xkr_massp * xkr_naggr ) 
    678  
    679       !!--------------------------------------------------------------------- 
    680       !!    'key_kriest'                                                  ??? 
    681       !!--------------------------------------------------------------------- 
    682       !  COMPUTATION OF THE VERTICAL PROFILE OF MAXIMUM SINKING SPEED 
    683       !  Search of the maximum number of particles in aggregates for each k-level. 
    684       !  Bissection Method 
    685       !-------------------------------------------------------------------- 
    686       IF (lwp) THEN 
    687         WRITE(numout,*) 
    688         WRITE(numout,*)'    kriest : Compute maximum number of particles in aggregates' 
    689       ENDIF 
    690  
    691       xacc     =  0.001_wp 
    692       kiter    = 50 
    693       zmin     =  1.10_wp 
    694       zmax     = xkr_mass_max / xkr_mass_min 
    695       xkr_frac = zmax 
    696  
    697       DO jk = 1,jpk 
    698          zl = zmin 
    699          zr = zmax 
    700          wmax = 0.5 * e3t_n(1,1,jk) * rday * float(niter1max) / rfact2 
    701          zdiv = xkr_zeta + xkr_eta - xkr_eta * zl 
    702          znum = zl - 1. 
    703          zwl =  xkr_wsbio_min * xkr_zeta / zdiv & 
    704             & - ( xkr_wsbio_max * xkr_eta * znum * & 
    705             &     xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 
    706             & - wmax 
    707  
    708          zdiv = xkr_zeta + xkr_eta - xkr_eta * zr 
    709          znum = zr - 1. 
    710          zwr =  xkr_wsbio_min * xkr_zeta / zdiv & 
    711             & - ( xkr_wsbio_max * xkr_eta * znum * & 
    712             &     xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 
    713             & - wmax 
    714 iflag:   DO jn = 1, kiter 
    715             IF    ( zwl == 0._wp ) THEN   ;   znummax = zl 
    716             ELSEIF( zwr == 0._wp ) THEN   ;   znummax = zr 
    717             ELSE 
    718                znummax = ( zr + zl ) / 2. 
    719                zdiv = xkr_zeta + xkr_eta - xkr_eta * znummax 
    720                znum = znummax - 1. 
    721                zws =  xkr_wsbio_min * xkr_zeta / zdiv & 
    722                   & - ( xkr_wsbio_max * xkr_eta * znum * & 
    723                   &     xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 
    724                   & - wmax 
    725                IF( zws * zwl < 0. ) THEN   ;   zr = znummax 
    726                ELSE                        ;   zl = znummax 
    727                ENDIF 
    728                zdiv = xkr_zeta + xkr_eta - xkr_eta * zl 
    729                znum = zl - 1. 
    730                zwl =  xkr_wsbio_min * xkr_zeta / zdiv & 
    731                   & - ( xkr_wsbio_max * xkr_eta * znum * & 
    732                   &     xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 
    733                   & - wmax 
    734  
    735                zdiv = xkr_zeta + xkr_eta - xkr_eta * zr 
    736                znum = zr - 1. 
    737                zwr =  xkr_wsbio_min * xkr_zeta / zdiv & 
    738                   & - ( xkr_wsbio_max * xkr_eta * znum * & 
    739                   &     xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 
    740                   & - wmax 
    741                ! 
    742                IF ( ABS ( zws )  <= xacc ) EXIT iflag 
    743                ! 
    744             ENDIF 
    745             ! 
    746          END DO iflag 
    747  
    748          xnumm(jk) = znummax 
    749          IF (lwp) WRITE(numout,*) '       jk = ', jk, ' wmax = ', wmax,' xnum max = ', xnumm(jk) 
    750          ! 
    751       END DO 
    752       ! 
    753       ik100 = 10        !  last level where depth less than 100 m 
    754       DO jk = jpkm1, 1, -1 
    755          IF( gdept_1d(jk) > 100. )  iksed = jk - 1 
    756       END DO 
    757       IF (lwp) WRITE(numout,*) 
    758       IF (lwp) WRITE(numout,*) ' Level corresponding to 100m depth ',  ik100 + 1 
    759       IF (lwp) WRITE(numout,*) 
    760       ! 
    761       t_oce_co2_exp = 0._wp 
    762       ! 
    763       IF( nn_timing == 1 )  CALL timing_stop('p4z_sink_init') 
    764       ! 
    765   END SUBROUTINE p4z_sink_init 
    766  
    767 #endif 
    768284 
    769285   SUBROUTINE p4z_sink2( pwsink, psinkflx, jp_tra, kiter ) 
     
    794310      CALL wrk_alloc( jpi, jpj, jpk, ztraz, zakz, zwsink2, ztrb ) 
    795311 
    796       zstep = rfact2 / FLOAT( kiter ) / 2. 
     312      zstep = rfact2 / REAL( kiter, wp ) / 2. 
    797313 
    798314      ztraz(:,:,:) = 0.e0 
     
    804320      END DO 
    805321      zwsink2(:,:,1) = 0.e0 
    806       IF( lk_degrad ) THEN 
    807          zwsink2(:,:,:) = zwsink2(:,:,:) * facvol(:,:,:) 
    808       ENDIF 
    809322 
    810323 
     
    887400      !!                     ***  ROUTINE p4z_sink_alloc  *** 
    888401      !!---------------------------------------------------------------------- 
    889       ALLOCATE( wsbio3 (jpi,jpj,jpk) , wsbio4  (jpi,jpj,jpk) , wscal(jpi,jpj,jpk) ,     & 
    890          &      sinking(jpi,jpj,jpk) , sinking2(jpi,jpj,jpk)                      ,     &                 
    891          &      sinkcal(jpi,jpj,jpk) , sinksil (jpi,jpj,jpk)                      ,     &                 
    892 #if defined key_kriest 
    893          &      xnumm(jpk)                                                        ,     &                 
    894 #else 
    895          &      sinkfer2(jpi,jpj,jpk)                                             ,     &                 
    896 #endif 
    897          &      sinkfer(jpi,jpj,jpk)                                              , STAT=p4z_sink_alloc )                 
     402      INTEGER :: ierr(3) 
     403 
     404      ierr(:) = 0 
     405      ! 
     406      ALLOCATE( sinking(jpi,jpj,jpk) , sinking2(jpi,jpj,jpk)                    ,     &                 
     407         &      sinkcal(jpi,jpj,jpk) , sinksil (jpi,jpj,jpk)                    ,     &                 
     408         &      sinkfer2(jpi,jpj,jpk)                                           ,     &                 
     409         &      sinkfer(jpi,jpj,jpk)                                            , STAT=ierr(1) )                 
    898410         ! 
     411      IF( ln_ligand ) ALLOCATE( sinkfep(jpi,jpj,jpk)                            , STAT=ierr(2) )   
     412          
     413      IF( ln_p5z    ) ALLOCATE( sinkingn(jpi,jpj,jpk), sinking2n(jpi,jpj,jpk)   ,     & 
     414         &                      sinkingp(jpi,jpj,jpk), sinking2p(jpi,jpj,jpk)   , STAT=ierr(3) ) 
     415      ! 
     416      p4z_sink_alloc = MAXVAL( ierr ) 
    899417      IF( p4z_sink_alloc /= 0 ) CALL ctl_warn('p4z_sink_alloc : failed to allocate arrays.') 
    900418      ! 
    901419   END FUNCTION p4z_sink_alloc 
    902420    
    903 #else 
    904    !!====================================================================== 
    905    !!  Dummy module :                                   No PISCES bio-model 
    906    !!====================================================================== 
    907 CONTAINS 
    908    SUBROUTINE p4z_sink                    ! Empty routine 
    909    END SUBROUTINE p4z_sink 
    910 #endif  
    911  
    912421   !!====================================================================== 
    913422END MODULE p4zsink 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90

    r6421 r7403  
    66   !! History :   1.0  !  2004-03 (O. Aumont) Original code 
    77   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90 
    8    !!---------------------------------------------------------------------- 
    9 #if defined key_pisces 
    10    !!---------------------------------------------------------------------- 
    11    !!   'key_pisces'                                       PISCES bio-model 
    128   !!---------------------------------------------------------------------- 
    139   !!   p4zsms         :  Time loop of passive tracers sms 
     
    6965      INTEGER ::   ji, jj, jk, jnt, jn, jl 
    7066      REAL(wp) ::  ztra 
    71 #if defined key_kriest 
    72       REAL(wp) ::  zcoef1, zcoef2 
    73 #endif 
    7467      CHARACTER (len=25) :: charout 
    7568      !!--------------------------------------------------------------------- 
     
    8376        CALL p4z_che                              ! initialize the chemical constants 
    8477        ! 
    85         IF( .NOT. ln_rsttr ) THEN  ;   CALL p4z_ph_ini   !  set PH at kt=nit000  
     78        IF( .NOT. ln_rsttr ) THEN  ;   CALL ahini_for_at(hi)   !  set PH at kt=nit000  
    8679        ELSE                       ;   CALL p4z_rst( nittrc000, 'READ' )  !* read or initialize all required fields  
    8780        ENDIF 
     
    9184      IF( ln_pisdmp .AND. MOD( kt - nn_dttrc, nn_pisdmp ) == 0 )   CALL p4z_dmp( kt )      ! Relaxation of some tracers 
    9285      ! 
    93       !                                                                    !   set time step size (Euler/Leapfrog) 
    94       IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN   ;    rfact = rdttrc     !  at nittrc000 
    95       ELSEIF( kt <= nittrc000 + nn_dttrc )                          THEN   ;    rfact = 2. * rdttrc   ! at nittrc000 or nittrc000+nn_dttrc (Leapfrog) 
    96       ENDIF 
     86      rfact = r2dttrc 
    9787      ! 
    9888      IF( ( ln_top_euler .AND. kt == nittrc000 )  .OR. ( .NOT.ln_top_euler .AND. kt <= nittrc000 + nn_dttrc ) ) THEN 
    9989         rfactr  = 1. / rfact 
    100          rfact2  = rfact / FLOAT( nrdttrc ) 
     90         rfact2  = rfact / REAL( nrdttrc, wp ) 
    10191         rfact2r = 1. / rfact2 
    10292         xstep = rfact2 / rday         ! Time step duration for biology 
     
    165155      END DO 
    166156 
    167 #if defined key_kriest 
    168       !  
    169       zcoef1 = 1.e0 / xkr_massp  
    170       zcoef2 = 1.e0 / xkr_massp / 1.1 
    171       DO jk = 1,jpkm1 
    172          trb(:,:,jk,jpnum) = MAX(  trb(:,:,jk,jpnum), trb(:,:,jk,jppoc) * zcoef1 / xnumm(jk)  ) 
    173          trb(:,:,jk,jpnum) = MIN(  trb(:,:,jk,jpnum), trb(:,:,jk,jppoc) * zcoef2              ) 
    174       END DO 
    175       ! 
    176 #endif 
    177       ! 
    178157      ! 
    179158      IF( l_trdtrc ) THEN 
     
    212191      !! ** input   :   file 'namelist.trc.s' containing the following 
    213192      !!             namelist: natext, natbio, natsms 
    214       !!                       natkriest ("key_kriest") 
    215       !!---------------------------------------------------------------------- 
    216       NAMELIST/nampisbio/ nrdttrc, wsbio, xkmort, ferat3, wsbio2, niter1max, niter2max 
    217 #if defined key_kriest 
    218       NAMELIST/nampiskrp/ xkr_eta, xkr_zeta, xkr_ncontent, xkr_mass_min, xkr_mass_max 
    219 #endif 
     193      !!---------------------------------------------------------------------- 
     194      NAMELIST/nampisbio/ nrdttrc, wsbio, xkmort, ferat3, wsbio2, wsbio2max, wsbio2scale,    & 
     195         &                   niter1max, niter2max, wfep, ldocp, ldocz, lthet,  & 
     196         &                   no3rat3, po4rat3 
     197 
    220198      NAMELIST/nampisdmp/ ln_pisdmp, nn_pisdmp 
    221199      NAMELIST/nampismass/ ln_check_mass 
     
    234212      IF(lwp) THEN                         ! control print 
    235213         WRITE(numout,*) ' Namelist : nampisbio' 
    236          WRITE(numout,*) '    frequence pour la biologie                nrdttrc   =', nrdttrc 
    237          WRITE(numout,*) '    POC sinking speed                         wsbio     =', wsbio 
    238          WRITE(numout,*) '    half saturation constant for mortality    xkmort    =', xkmort 
    239          WRITE(numout,*) '    Fe/C in zooplankton                       ferat3    =', ferat3 
    240          WRITE(numout,*) '    Big particles sinking speed               wsbio2    =', wsbio2 
     214         WRITE(numout,*) '    frequence pour la biologie                nrdttrc    =', nrdttrc 
     215         WRITE(numout,*) '    POC sinking speed                         wsbio      =', wsbio 
     216         WRITE(numout,*) '    half saturation constant for mortality    xkmort     =', xkmort  
     217         IF( ln_p5z ) THEN 
     218            WRITE(numout,*) '    N/C in zooplankton                        no3rat3    =', no3rat3 
     219            WRITE(numout,*) '    P/C in zooplankton                        po4rat3    =', po4rat3 
     220         ENDIF 
     221         WRITE(numout,*) '    Fe/C in zooplankton                       ferat3     =', ferat3 
     222         WRITE(numout,*) '    Big particles sinking speed               wsbio2     =', wsbio2 
     223         WRITE(numout,*) '    Big particles maximum sinking speed       wsbio2max  =', wsbio2max 
     224         WRITE(numout,*) '    Big particles sinking speed length scale  wsbio2scale =', wsbio2scale 
    241225         WRITE(numout,*) '    Maximum number of iterations for POC      niter1max =', niter1max 
    242226         WRITE(numout,*) '    Maximum number of iterations for GOC      niter2max =', niter2max 
    243       ENDIF 
    244  
    245 #if defined key_kriest 
    246  
    247       !                               ! nampiskrp : kriest parameters 
    248       !                               ! ----------------------------- 
    249       REWIND( numnatp_ref )              ! Namelist nampiskrp in reference namelist : Pisces Kriest 
    250       READ  ( numnatp_ref, nampiskrp, IOSTAT = ios, ERR = 903) 
    251 903   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiskrp in reference namelist', lwp ) 
    252  
    253       REWIND( numnatp_cfg )              ! Namelist nampiskrp in configuration namelist : Pisces Kriest 
    254       READ  ( numnatp_cfg, nampiskrp, IOSTAT = ios, ERR = 904 ) 
    255 904   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiskrp in configuration namelist', lwp ) 
    256       IF(lwm) WRITE ( numonp, nampiskrp ) 
    257  
    258       IF(lwp) THEN 
    259          WRITE(numout,*) 
    260          WRITE(numout,*) ' Namelist : nampiskrp' 
    261          WRITE(numout,*) '    Sinking  exponent                        xkr_eta      = ', xkr_eta 
    262          WRITE(numout,*) '    N content exponent                       xkr_zeta     = ', xkr_zeta 
    263          WRITE(numout,*) '    N content factor                         xkr_ncontent = ', xkr_ncontent 
    264          WRITE(numout,*) '    Minimum mass for Aggregates              xkr_mass_min = ', xkr_mass_min 
    265          WRITE(numout,*) '    Maximum mass for Aggregates              xkr_mass_max = ', xkr_mass_max 
    266          WRITE(numout,*) 
    267      ENDIF 
    268  
    269  
    270      ! Computation of some variables 
    271      xkr_massp = xkr_ncontent * 7.625 * xkr_mass_min**xkr_zeta 
    272  
    273 #endif 
     227         IF( ln_ligand ) THEN 
     228            WRITE(numout,*) '    FeP sinking speed                             wfep   =', wfep 
     229            IF( ln_p4z ) THEN 
     230              WRITE(numout,*) '    Phyto ligand production per unit doc          ldocp  =', ldocp 
     231              WRITE(numout,*) '    Zoo ligand production per unit doc            ldocz  =', ldocz 
     232              WRITE(numout,*) '    Proportional loss of ligands due to Fe uptake lthet  =', lthet 
     233            ENDIF 
     234         ENDIF 
     235      ENDIF 
     236 
    274237 
    275238      REWIND( numnatp_ref )              ! Namelist nampisdmp in reference namelist : Pisces damping 
     
    308271   END SUBROUTINE p4z_sms_init 
    309272 
    310    SUBROUTINE p4z_ph_ini 
    311       !!--------------------------------------------------------------------- 
    312       !!                   ***  ROUTINE p4z_ini_ph  *** 
    313       !! 
    314       !!  ** Purpose : Initialization of chemical variables of the carbon cycle 
    315       !!--------------------------------------------------------------------- 
    316       INTEGER  ::  ji, jj, jk 
    317       REAL(wp) ::  zcaralk, zbicarb, zco3 
    318       REAL(wp) ::  ztmas, ztmas1 
    319       !!--------------------------------------------------------------------- 
    320  
    321       ! Set PH from  total alkalinity, borat (???), akb3 (???) and ak23 (???) 
    322       ! -------------------------------------------------------- 
    323       DO jk = 1, jpk 
    324          DO jj = 1, jpj 
    325             DO ji = 1, jpi 
    326                ztmas   = tmask(ji,jj,jk) 
    327                ztmas1  = 1. - tmask(ji,jj,jk) 
    328                zcaralk = trb(ji,jj,jk,jptal) - borat(ji,jj,jk) / (  1. + 1.E-8 / ( rtrn + akb3(ji,jj,jk) )  ) 
    329                zco3    = ( zcaralk - trb(ji,jj,jk,jpdic) ) * ztmas + 0.5e-3 * ztmas1 
    330                zbicarb = ( 2. * trb(ji,jj,jk,jpdic) - zcaralk ) 
    331                hi(ji,jj,jk) = ( ak23(ji,jj,jk) * zbicarb / zco3 ) * ztmas + 1.e-9 * ztmas1 
    332             END DO 
    333          END DO 
    334      END DO 
    335      ! 
    336    END SUBROUTINE p4z_ph_ini 
    337  
    338273   SUBROUTINE p4z_rst( kt, cdrw ) 
    339274      !!--------------------------------------------------------------------- 
     
    349284      CHARACTER(len=*), INTENT(in) ::   cdrw       ! "READ"/"WRITE" flag 
    350285      ! 
    351       INTEGER  ::  ji, jj, jk 
    352       REAL(wp) ::  zcaralk, zbicarb, zco3 
    353       REAL(wp) ::  ztmas, ztmas1 
    354286      !!--------------------------------------------------------------------- 
    355287 
     
    363295            CALL iom_get( numrtr, jpdom_autoglo, 'PH' , hi(:,:,:)  ) 
    364296         ELSE 
    365 !            hi(:,:,:) = 1.e-9  
    366             CALL p4z_ph_ini 
     297            CALL ahini_for_at(hi) 
    367298         ENDIF 
    368299         CALL iom_get( numrtr, jpdom_autoglo, 'Silicalim', xksi(:,:) ) 
     
    379310         ENDIF 
    380311         ! 
     312         IF( ln_p5z ) THEN 
     313            IF( iom_varid( numrtr, 'sized', ldstop = .FALSE. ) > 0 ) THEN 
     314               CALL iom_get( numrtr, jpdom_autoglo, 'sizep' , sized(:,:,:)  ) 
     315               CALL iom_get( numrtr, jpdom_autoglo, 'sizen' , sized(:,:,:)  ) 
     316               CALL iom_get( numrtr, jpdom_autoglo, 'sized' , sized(:,:,:)  ) 
     317            ELSE 
     318               sizep(:,:,:) = 1. 
     319               sizen(:,:,:) = 1. 
     320               sized(:,:,:) = 1. 
     321            ENDIF 
     322        ENDIF 
     323        ! 
    381324      ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN 
    382325         IF( kt == nitrst ) THEN 
     
    389332         CALL iom_rstput( kt, nitrst, numrtw, 'Silicamax', xksimax(:,:) ) 
    390333         CALL iom_rstput( kt, nitrst, numrtw, 'tcflxcum', t_oce_co2_flx_cum ) 
     334         IF( ln_p5z ) THEN 
     335            CALL iom_rstput( kt, nitrst, numrtw, 'sizep', sized(:,:,:) ) 
     336            CALL iom_rstput( kt, nitrst, numrtw, 'sizen', sized(:,:,:) ) 
     337            CALL iom_rstput( kt, nitrst, numrtw, 'sized', sized(:,:,:) ) 
     338         ENDIF 
    391339      ENDIF 
    392340      ! 
     
    475423      REAL(wp)             ::  zrdenittot, zsdenittot, znitrpottot 
    476424      CHARACTER(LEN=100)   ::   cltxt 
    477       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zvol 
    478425      INTEGER :: jk 
     426      REAL(wp), POINTER, DIMENSION(:,:,:) :: zwork 
    479427      !!---------------------------------------------------------------------- 
    480428 
     
    496444      ENDIF 
    497445 
     446      CALL wrk_alloc( jpi, jpj, jpk, zwork ) 
    498447      ! 
    499448      IF( iom_use( "pno3tot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    500449         !   Compute the budget of NO3, ALK, Si, Fer 
    501          no3budget = glob_sum( (   trn(:,:,:,jpno3) + trn(:,:,:,jpnh4)  & 
    502             &                    + trn(:,:,:,jpphy) + trn(:,:,:,jpdia)  & 
    503             &                    + trn(:,:,:,jpzoo) + trn(:,:,:,jpmes)  & 
    504             &                    + trn(:,:,:,jppoc)                     & 
    505 #if ! defined key_kriest 
    506             &                    + trn(:,:,:,jpgoc)                     & 
    507 #endif 
    508             &                    + trn(:,:,:,jpdoc)                     ) * cvol(:,:,:)  ) 
    509          ! 
    510          no3budget = no3budget / areatot 
    511          CALL iom_put( "pno3tot", no3budget ) 
     450         IF( ln_p4z ) THEN 
     451            zwork(:,:,:) =    trn(:,:,:,jpno3) + trn(:,:,:,jpnh4)                      & 
     452               &          +   trn(:,:,:,jpphy) + trn(:,:,:,jpdia)                      & 
     453               &          +   trn(:,:,:,jppoc) + trn(:,:,:,jpgoc)  + trn(:,:,:,jpdoc)  &         
     454               &          +   trn(:,:,:,jpzoo) + trn(:,:,:,jpmes)  
     455        ELSE 
     456            zwork(:,:,:) =    trn(:,:,:,jpno3) + trn(:,:,:,jpnh4) + trn(:,:,:,jpnph)   & 
     457               &          +   trn(:,:,:,jpndi) + trn(:,:,:,jpnpi)                      &  
     458               &          +   trn(:,:,:,jppon) + trn(:,:,:,jpgon) + trn(:,:,:,jpdon)   & 
     459               &          + ( trn(:,:,:,jpzoo) + trn(:,:,:,jpmes) ) * no3rat3  
     460        ENDIF 
     461        ! 
     462        no3budget = glob_sum( zwork(:,:,:) * cvol(:,:,:)  )   
     463        no3budget = no3budget / areatot 
     464        CALL iom_put( "pno3tot", no3budget ) 
    512465      ENDIF 
    513466      ! 
    514467      IF( iom_use( "ppo4tot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    515          po4budget = glob_sum( (   trn(:,:,:,jppo4)                     & 
    516             &                    + trn(:,:,:,jpphy) + trn(:,:,:,jpdia)  & 
    517             &                    + trn(:,:,:,jpzoo) + trn(:,:,:,jpmes)  & 
    518             &                    + trn(:,:,:,jppoc)                     & 
    519 #if ! defined key_kriest 
    520             &                    + trn(:,:,:,jpgoc)                     & 
    521 #endif 
    522             &                    + trn(:,:,:,jpdoc)                     ) * cvol(:,:,:)  ) 
    523          po4budget = po4budget / areatot 
    524          CALL iom_put( "ppo4tot", po4budget ) 
     468         IF( ln_p4z ) THEN 
     469            zwork(:,:,:) =    trn(:,:,:,jppo4)                                         & 
     470               &          +   trn(:,:,:,jpphy) + trn(:,:,:,jpdia)                      & 
     471               &          +   trn(:,:,:,jppoc) + trn(:,:,:,jpgoc)  + trn(:,:,:,jpdoc)  &         
     472               &          +   trn(:,:,:,jpzoo) + trn(:,:,:,jpmes)  
     473        ELSE 
     474            zwork(:,:,:) =    trn(:,:,:,jppo4) + trn(:,:,:,jppph)                      & 
     475               &          +   trn(:,:,:,jppdi) + trn(:,:,:,jpppi)                      &  
     476               &          +   trn(:,:,:,jppop) + trn(:,:,:,jpgop) + trn(:,:,:,jpdop)   & 
     477               &          + ( trn(:,:,:,jpzoo) + trn(:,:,:,jpmes) ) * po4rat3  
     478        ENDIF 
     479        ! 
     480        po4budget = glob_sum( zwork(:,:,:) * cvol(:,:,:)  )   
     481        po4budget = po4budget / areatot 
     482        CALL iom_put( "ppo4tot", po4budget ) 
    525483      ENDIF 
    526484      ! 
    527485      IF( iom_use( "psiltot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    528          silbudget = glob_sum( (   trn(:,:,:,jpsil) + trn(:,:,:,jpgsi)  & 
    529             &                    + trn(:,:,:,jpdsi)                     ) * cvol(:,:,:)  ) 
    530          ! 
     486         zwork(:,:,:) =  trn(:,:,:,jpsil) + trn(:,:,:,jpgsi) + trn(:,:,:,jpdsi)  
     487         ! 
     488         silbudget = glob_sum( zwork(:,:,:) * cvol(:,:,:)  )   
    531489         silbudget = silbudget / areatot 
    532490         CALL iom_put( "psiltot", silbudget ) 
     
    534492      ! 
    535493      IF( iom_use( "palktot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    536          alkbudget = glob_sum( (   trn(:,:,:,jpno3) * rno3              & 
    537             &                    + trn(:,:,:,jptal)                     & 
    538             &                    + trn(:,:,:,jpcal) * 2.                ) * cvol(:,:,:)  ) 
    539          ! 
     494         zwork(:,:,:) =  trn(:,:,:,jpno3) * rno3 + trn(:,:,:,jptal) + trn(:,:,:,jpcal) * 2.               
     495         ! 
     496         alkbudget = glob_sum( zwork(:,:,:) * cvol(:,:,:)  )         ! 
    540497         alkbudget = alkbudget / areatot 
    541498         CALL iom_put( "palktot", alkbudget ) 
     
    543500      ! 
    544501      IF( iom_use( "pfertot" ) .OR. ( ln_check_mass .AND. kt == nitend )  ) THEN 
    545          ferbudget = glob_sum( (   trn(:,:,:,jpfer) + trn(:,:,:,jpnfe)  & 
    546             &                    + trn(:,:,:,jpdfe)                     & 
    547 #if ! defined key_kriest 
    548             &                    + trn(:,:,:,jpbfe)                     & 
    549 #endif 
    550             &                    + trn(:,:,:,jpsfe)                     & 
    551             &                    + trn(:,:,:,jpzoo) * ferat3            & 
    552             &                    + trn(:,:,:,jpmes) * ferat3            ) * cvol(:,:,:)  ) 
    553          ! 
     502         zwork(:,:,:) =   trn(:,:,:,jpfer) + trn(:,:,:,jpnfe) + trn(:,:,:,jpdfe)   & 
     503            &         +   trn(:,:,:,jpbfe) + trn(:,:,:,jpsfe)                      & 
     504            &         + ( trn(:,:,:,jpzoo) + trn(:,:,:,jpmes) )  * ferat3     
     505         IF( ln_ligand)  zwork(:,:,:) = zwork(:,:,:) + trn(:,:,:,jpfep)                 
     506         ! 
     507         ferbudget = glob_sum( zwork(:,:,:) * cvol(:,:,:)  )   
    554508         ferbudget = ferbudget / areatot 
    555509         CALL iom_put( "pfertot", ferbudget ) 
    556510      ENDIF 
    557511      ! 
    558  
     512      CALL wrk_dealloc( jpi, jpj, jpk, zwork ) 
     513      ! 
    559514      ! Global budget of N SMS : denitrification in the water column and in the sediment 
    560515      !                          nitrogen fixation by the diazotrophs 
     
    600555   END SUBROUTINE p4z_chk_mass 
    601556 
    602 #else 
    603    !!====================================================================== 
    604    !!  Dummy module :                                   No PISCES bio-model 
    605    !!====================================================================== 
    606 CONTAINS 
    607    SUBROUTINE p4z_sms( kt )                   ! Empty routine 
    608       INTEGER, INTENT( in ) ::   kt 
    609       WRITE(*,*) 'p4z_sms: You should not have seen this print! error?', kt 
    610    END SUBROUTINE p4z_sms 
    611 #endif  
    612  
    613557   !!====================================================================== 
    614558END MODULE p4zsms  
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/par_sed.F90

    r5215 r7403  
    2424#endif 
    2525 
    26 #if defined key_kriest 
    27    INTEGER, PARAMETER :: jpdta = 11 
    28 #else 
    2926   INTEGER, PARAMETER :: jpdta = 12 
    30 #endif 
    3127 
    3228 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/sed.F90

    r5215 r7403  
    4040 
    4141   USE p4zsink , ONLY :  sinking    =>   sinking         !: sinking flux for POC 
    42 #if ! defined key_kriest 
    4342   USE p4zsink , ONLY :  sinking2   =>   sinking2        !: sinking flux for GOC 
    44 #endif 
    4543   USE p4zsink , ONLY :  sinkcal    =>   sinkcal         !: sinking flux for calcite 
    4644   USE p4zsink , ONLY :  sinksil    =>   sinksil         !: sinking flux for opal ( dsi ) 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/seddta.F90

    r5215 r7403  
    5555 
    5656      REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zdta 
    57 #if ! defined key_kriest 
    5857      REAL(wp), DIMENSION(:)  , ALLOCATABLE :: zdtap, zdtag 
    59 #endif  
    6058 
    6159 
     
    9795      ENDIF 
    9896 
    99  
    100 #if ! defined key_kriest    
    10197      ! Initialization of temporaries arrays   
    10298      ALLOCATE( zdtap(jpoce) )    ;   zdtap(:)    = 0.  
    10399      ALLOCATE( zdtag(jpoce) )    ;   zdtag(:)    = 0.   
    104 #endif 
    105  
    106100 
    107101      IF( MOD( kt - 1, nfreq ) == 0 ) THEN 
     
    122116                  trc_data(ji,jj,5)  = trn  (ji,jj,ikt,jpoxy) 
    123117                  trc_data(ji,jj,6)  = trn  (ji,jj,ikt,jpsil) 
    124 #   if ! defined key_kriest 
    125118                  trc_data(ji,jj,7 ) = sinksil (ji,jj,ikt) 
    126119                  trc_data(ji,jj,8 ) = sinking (ji,jj,ikt) 
     
    129122                  trc_data(ji,jj,11) = tsn     (ji,jj,ikt,jp_tem) 
    130123                  trc_data(ji,jj,12) = tsn     (ji,jj,ikt,jp_sal) 
    131 #   else 
    132                   trc_data(ji,jj,7 ) = sinksil (ji,jj,ikt) 
    133                   trc_data(ji,jj,8 ) = sinking (ji,jj,ikt) 
    134                   trc_data(ji,jj,9 ) = sinkcal (ji,jj,ikt) 
    135                   trc_data(ji,jj,10) = tsn     (ji,jj,ikt,jp_tem) 
    136                   trc_data(ji,jj,11) = tsn     (ji,jj,ikt,jp_sal)        
    137 #   endif 
    138124               ENDIF 
    139125            ENDDO 
     
    147133         CALL iom_get( numbio, jpdom_data, 'O2BOT'      , trc_data(:,:,5 ) ) 
    148134         CALL iom_get( numbio, jpdom_data, 'SIBOT'      , trc_data(:,:,6 ) ) 
    149 #   if ! defined key_kriest 
    150135         CALL iom_get( numbio, jpdom_data, 'OPALFLXBOT' , trc_data(:,:,7 ) )  
    151136         CALL iom_get( numbio, jpdom_data, 'POCFLXBOT'  , trc_data(:,:,8 ) )  
     
    154139         CALL iom_get( numoce, jpdom_data, 'TBOT'       , trc_data(:,:,11) )  
    155140         CALL iom_get( numoce, jpdom_data, 'SBOT'       , trc_data(:,:,12) )  
    156 #   else 
    157          CALL iom_get( numbio, jpdom_data, 'OPALFLXBOT' , trc_data(:,:,7 ) )  
    158          CALL iom_get( numbio, jpdom_data, 'POCFLXBOT'  , trc_data(:,:,8 ) )  
    159          CALL iom_get( numbio, jpdom_data, 'CACO3FLXBOT', trc_data(:,:,9 ) )  
    160          CALL iom_get( numoce, jpdom_data, 'TBOT'       , trc_data(:,:,10) )  
    161          CALL iom_get( numoce, jpdom_data, 'SBOT'       , trc_data(:,:,11) )  
    162 #   endif 
    163141#endif 
    164142 
     
    186164         !  Solid components :  
    187165         !----------------------- 
    188 #if ! defined key_kriest 
    189166         !  Sinking fluxes for OPAL in mol.m-2.s-1 ; conversion in mol.cm-2.s-1 
    190167         CALL pack_arr ( jpoce, rainrm_dta(1:jpoce,jsopal), trc_data(1:jpi,1:jpj,7), iarroce(1:jpoce) )  
     
    200177         CALL pack_arr ( jpoce,  temp(1:jpoce), trc_data(1:jpi,1:jpj,11), iarroce(1:jpoce) ) 
    201178         CALL pack_arr ( jpoce,  salt(1:jpoce), trc_data(1:jpi,1:jpj,12), iarroce(1:jpoce) ) 
    202 #else 
    203          !  Sinking fluxes for OPAL in mol.m-2.s-1 ; conversion in mol.cm-2.s-1 
    204          CALL pack_arr ( jpoce, rainrm_dta(1:jpoce,jsopal), trc_data(1:jpi,1:jpj,7), iarroce(1:jpoce) )  
    205          rainrm_dta(1:jpoce,jsopal) = rainrm_dta(1:jpoce,jsopal) * 1e-4 
    206          !  Sinking fluxes for POC in mol.m-2.s-1 ; conversion in mol.cm-2.s-1 
    207          CALL pack_arr ( jpoce, rainrm_dta(1:jpoce,jspoc), trc_data(1:jpi,1:jpj,8) , iarroce(1:jpoce) )       
    208          rainrm_dta(1:jpoce,jspoc) = rainrm_dta(1:jpoce,jspoc) * 1e-4 
    209          !  Sinking fluxes for Calcite in mol.m-2.s-1 ; conversion in mol.cm-2.s-1 
    210          CALL pack_arr ( jpoce,  rainrm_dta(1:jpoce,jscal), trc_data(1:jpi,1:jpj,9), iarroce(1:jpoce) ) 
    211          rainrm_dta(1:jpoce,jscal) = rainrm_dta(1:jpoce,jscal) * 1e-4 
    212          ! vector temperature [°C] and salinity  
    213          CALL pack_arr ( jpoce,  temp(1:jpoce), trc_data(1:jpi,1:jpj,10), iarroce(1:jpoce) ) 
    214          CALL pack_arr ( jpoce,  salt(1:jpoce), trc_data(1:jpi,1:jpj,11), iarroce(1:jpoce) ) 
    215  
    216 #endif 
    217179         
    218180         ! Clay rain rate in [mol/(cm**2.s)]  
     
    252214 
    253215      DEALLOCATE( zdta )  
    254 #if ! defined key_kriest 
    255216      DEALLOCATE( zdtap    ) ;  DEALLOCATE( zdtag    )  
    256 #endif       
    257217 
    258218      IF( kt == nitsedend )   THEN 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/SED/sedmodel.F90

    r5215 r7403  
    1515   PUBLIC sed_model  ! called by step.F90 
    1616 
    17    LOGICAL, PUBLIC, PARAMETER ::   lk_sed = .TRUE.     !: sediment flag 
    18  
    19    !! $Id$ 
    2017CONTAINS 
    2118 
     
    4744   !! MODULE sedmodel  :   Dummy module  
    4845   !!====================================================================== 
    49    LOGICAL, PUBLIC, PARAMETER ::   lk_sed = .FALSE.     !: sediment flag 
    50    !! $Id$ 
    5146CONTAINS 
    5247   SUBROUTINE sed_model( kt )         ! Empty routine 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/par_pisces.F90

    r5385 r7403  
    1313   IMPLICIT NONE 
    1414 
    15 #if defined key_pisces_reduced 
    16    !!--------------------------------------------------------------------- 
    17    !!   'key_pisces_reduced'   :                                LOBSTER bio-model 
    18    !!--------------------------------------------------------------------- 
    19    LOGICAL, PUBLIC, PARAMETER ::   lk_pisces     = .TRUE.  !: PISCES flag  
    20    LOGICAL, PUBLIC, PARAMETER ::   lk_p4z        = .FALSE. !: p4z flag  
    21    INTEGER, PUBLIC, PARAMETER ::   jp_pisces     =  6      !: number of passive tracers 
    22    INTEGER, PUBLIC, PARAMETER ::   jp_pisces_2d  =  19     !: additional 2d output  
    23    INTEGER, PUBLIC, PARAMETER ::   jp_pisces_3d  =   3     !: additional 3d output  
    24    INTEGER, PUBLIC, PARAMETER ::   jp_pisces_trd =   17    !: number of sms trends for PISCES 
     15   ! productive layer depth 
     16   INTEGER, PUBLIC ::   jpkb       !: first vertical layers where biology is active 
     17   INTEGER, PUBLIC ::   jpkbm1     !: first vertical layers where biology is active 
    2518 
    2619   ! assign an index in trc arrays for each LOBSTER prognostic variables 
    27    INTEGER, PUBLIC, PARAMETER ::   jpdet     =  1        !: detritus                    [mmoleN/m3] 
    28    INTEGER, PUBLIC, PARAMETER ::   jpzoo     =  2        !: zooplancton concentration   [mmoleN/m3] 
    29    INTEGER, PUBLIC, PARAMETER ::   jpphy     =  3        !: phytoplancton concentration [mmoleN/m3] 
    30    INTEGER, PUBLIC, PARAMETER ::   jpno3     =  4        !: nitrate concentration       [mmoleN/m3] 
    31    INTEGER, PUBLIC, PARAMETER ::   jpnh4     =  5        !: ammonium concentration      [mmoleN/m3] 
    32    INTEGER, PUBLIC, PARAMETER ::   jpdom     =  6        !: dissolved organic matter    [mmoleN/m3] 
     20   INTEGER, PUBLIC ::   jpdet     !: detritus                    
     21   INTEGER, PUBLIC ::   jpdom     !: dissolved organic matter  
     22   INTEGER, PUBLIC ::   jpdic     !: dissolved inoganic carbon concentration  
     23   INTEGER, PUBLIC ::   jptal     !: total alkalinity  
     24   INTEGER, PUBLIC ::   jpoxy     !: oxygen carbon concentration  
     25   INTEGER, PUBLIC ::   jpcal     !: calcite  concentration  
     26   INTEGER, PUBLIC ::   jppo4     !: phosphate concentration  
     27   INTEGER, PUBLIC ::   jppoc     !: small particulate organic phosphate concentration 
     28   INTEGER, PUBLIC ::   jpsil     !: silicate concentration 
     29   INTEGER, PUBLIC ::   jpphy     !: phytoplancton concentration  
     30   INTEGER, PUBLIC ::   jpzoo     !: zooplancton concentration 
     31   INTEGER, PUBLIC ::   jpdoc     !: dissolved organic carbon concentration  
     32   INTEGER, PUBLIC ::   jpdia     !: Diatoms Concentration 
     33   INTEGER, PUBLIC ::   jpmes     !: Mesozooplankton Concentration 
     34   INTEGER, PUBLIC ::   jpdsi     !: Diatoms Silicate Concentration 
     35   INTEGER, PUBLIC ::   jpfer     !: Iron Concentration 
     36   INTEGER, PUBLIC ::   jpbfe     !: Big iron particles Concentration 
     37   INTEGER, PUBLIC ::   jpgoc     !: big particulate organic phosphate concentration 
     38   INTEGER, PUBLIC ::   jpsfe     !: Small iron particles Concentration 
     39   INTEGER, PUBLIC ::   jpdfe     !: Diatoms iron Concentration 
     40   INTEGER, PUBLIC ::   jpgsi     !: (big) Silicate Concentration 
     41   INTEGER, PUBLIC ::   jpnfe     !: Nano iron Concentration 
     42   INTEGER, PUBLIC ::   jpnch     !: Nano Chlorophyll Concentration 
     43   INTEGER, PUBLIC ::   jpdch     !: Diatoms Chlorophyll Concentration 
     44   INTEGER, PUBLIC ::   jpno3     !: Nitrates Concentration 
     45   INTEGER, PUBLIC ::   jpnh4     !: Ammonium Concentration 
     46   INTEGER, PUBLIC ::   jpdon     !: dissolved organic nitrogen concentration 
     47   INTEGER, PUBLIC ::   jpdop     !: dissolved organic phosphorus concentration 
     48   INTEGER, PUBLIC ::   jppon     !: small particulate organic nitrogen concentration 
     49   INTEGER, PUBLIC ::   jppop     !: small particulate organic phosphorus concentration 
     50   INTEGER, PUBLIC ::   jpnph     !: small particulate organic phosphorus concentration 
     51   INTEGER, PUBLIC ::   jppph     !: small particulate organic phosphorus concentration 
     52   INTEGER, PUBLIC ::   jpndi     !: small particulate organic phosphorus concentration 
     53   INTEGER, PUBLIC ::   jppdi     !: small particulate organic phosphorus concentration 
     54   INTEGER, PUBLIC ::   jppic     !: small particulate organic phosphorus concentration 
     55   INTEGER, PUBLIC ::   jpnpi     !: small particulate organic phosphorus concentration 
     56   INTEGER, PUBLIC ::   jpppi     !: small particulate organic phosphorus concentration 
     57   INTEGER, PUBLIC ::   jppfe     !: small particulate organic phosphorus concentration 
     58   INTEGER, PUBLIC ::   jppch     !: small particulate organic phosphorus concentration 
     59   INTEGER, PUBLIC ::   jpgon     !: Big nitrogen particles Concentration 
     60   INTEGER, PUBLIC ::   jpgop     !: Big phosphorus particles Concentration 
     61   INTEGER, PUBLIC ::   jplgw     !: Weak Ligands 
     62   INTEGER, PUBLIC ::   jpfep     !: Fe nanoparticle 
    3363 
    34    ! productive layer depth 
    35    INTEGER, PUBLIC, PARAMETER ::   jpkb      = 12        !: first vertical layers where biology is active 
    36    INTEGER, PUBLIC, PARAMETER ::   jpkbm1    = jpkb - 1  !: first vertical layers where biology is active 
    37  
    38 #elif defined key_pisces  &&  defined key_kriest 
    39    !!--------------------------------------------------------------------- 
    40    !!   'key_pisces' & 'key_kriest'                 PISCES bio-model + ??? 
    41    !!--------------------------------------------------------------------- 
    42    LOGICAL, PUBLIC, PARAMETER ::   lk_pisces     = .TRUE.  !: PISCES flag  
    43    LOGICAL, PUBLIC, PARAMETER ::   lk_p4z        = .TRUE. !: p4z flag  
    44    LOGICAL, PUBLIC, PARAMETER ::   lk_kriest     = .TRUE.  !: Kriest flag  
    45    INTEGER, PUBLIC, PARAMETER ::   jp_pisces     =  23     !: number of passive tracers 
    46    INTEGER, PUBLIC, PARAMETER ::   jp_pisces_2d  =  13     !: additional 2d output  
    47    INTEGER, PUBLIC, PARAMETER ::   jp_pisces_3d  =  18     !: additional 3d output  
    48    INTEGER, PUBLIC, PARAMETER ::   jp_pisces_trd =   1     !: number of sms trends for PISCES 
    49  
    50    ! assign an index in trc arrays for each LOBSTER prognostic variables 
    51    !    WARNING: be carefull about the order when reading the restart 
    52         !   !!gm  this warning should be obsolet with IOM 
    53    INTEGER, PUBLIC, PARAMETER ::   jpdic =  1    !: dissolved inoganic carbon concentration  
    54    INTEGER, PUBLIC, PARAMETER ::   jptal =  2    !: total alkalinity  
    55    INTEGER, PUBLIC, PARAMETER ::   jpoxy =  3    !: oxygen carbon concentration  
    56    INTEGER, PUBLIC, PARAMETER ::   jpcal =  4    !: calcite  concentration  
    57    INTEGER, PUBLIC, PARAMETER ::   jppo4 =  5    !: phosphate concentration  
    58    INTEGER, PUBLIC, PARAMETER ::   jppoc =  6    !: small particulate organic phosphate concentration 
    59    INTEGER, PUBLIC, PARAMETER ::   jpsil =  7    !: silicate concentration 
    60    INTEGER, PUBLIC, PARAMETER ::   jpphy =  8    !: phytoplancton concentration  
    61    INTEGER, PUBLIC, PARAMETER ::   jpzoo =  9    !: zooplancton concentration 
    62    INTEGER, PUBLIC, PARAMETER ::   jpdoc = 10    !: dissolved organic carbon concentration  
    63    INTEGER, PUBLIC, PARAMETER ::   jpdia = 11    !: Diatoms Concentration 
    64    INTEGER, PUBLIC, PARAMETER ::   jpmes = 12    !: Mesozooplankton Concentration 
    65    INTEGER, PUBLIC, PARAMETER ::   jpdsi = 13    !: Diatoms Silicate Concentration 
    66    INTEGER, PUBLIC, PARAMETER ::   jpfer = 14    !: Iron Concentration 
    67    INTEGER, PUBLIC, PARAMETER ::   jpnum = 15    !: Big iron particles Concentration 
    68    INTEGER, PUBLIC, PARAMETER ::   jpsfe = 16    !: number of particulate organic phosphate concentration 
    69    INTEGER, PUBLIC, PARAMETER ::   jpdfe = 17    !: Diatoms iron Concentration 
    70    INTEGER, PUBLIC, PARAMETER ::   jpgsi = 18    !: (big) Silicate Concentration 
    71    INTEGER, PUBLIC, PARAMETER ::   jpnfe = 19    !: Nano iron Concentration 
    72    INTEGER, PUBLIC, PARAMETER ::   jpnch = 20    !: Nano Chlorophyll Concentration 
    73    INTEGER, PUBLIC, PARAMETER ::   jpdch = 21    !: Diatoms Chlorophyll Concentration 
    74    INTEGER, PUBLIC, PARAMETER ::   jpno3 = 22    !: Nitrates Concentration 
    75    INTEGER, PUBLIC, PARAMETER ::   jpnh4 = 23    !: Ammonium Concentration 
    76  
    77 #elif defined key_pisces 
    78    !!--------------------------------------------------------------------- 
    79    !!   'key_pisces'   :                         standard PISCES bio-model 
    80    !!--------------------------------------------------------------------- 
    81    LOGICAL, PUBLIC, PARAMETER ::   lk_pisces     = .TRUE.  !: PISCES flag  
    82    LOGICAL, PUBLIC, PARAMETER ::   lk_p4z        = .TRUE.  !: p4z flag  
    83    LOGICAL, PUBLIC, PARAMETER ::   lk_kriest     = .FALSE. !: Kriest flag  
    84    INTEGER, PUBLIC, PARAMETER ::   jp_pisces     = 24      !: number of PISCES passive tracers 
    85    INTEGER, PUBLIC, PARAMETER ::   jp_pisces_2d  = 13      !: additional 2d output  
    86    INTEGER, PUBLIC, PARAMETER ::   jp_pisces_3d  = 11      !: additional 3d output  
    87    INTEGER, PUBLIC, PARAMETER ::   jp_pisces_trd =  1      !: number of sms trends for PISCES 
    88  
    89    ! assign an index in trc arrays for each LOBSTER prognostic variables 
    90    !    WARNING: be carefull about the order when reading the restart 
    91         !   !!gm  this warning should be obsolet with IOM 
    92    INTEGER, PUBLIC, PARAMETER ::   jpdic =  1    !: dissolved inoganic carbon concentration  
    93    INTEGER, PUBLIC, PARAMETER ::   jptal =  2    !: total alkalinity  
    94    INTEGER, PUBLIC, PARAMETER ::   jpoxy =  3    !: oxygen carbon concentration  
    95    INTEGER, PUBLIC, PARAMETER ::   jpcal =  4    !: calcite  concentration  
    96    INTEGER, PUBLIC, PARAMETER ::   jppo4 =  5    !: phosphate concentration  
    97    INTEGER, PUBLIC, PARAMETER ::   jppoc =  6    !: small particulate organic phosphate concentration 
    98    INTEGER, PUBLIC, PARAMETER ::   jpsil =  7    !: silicate concentration 
    99    INTEGER, PUBLIC, PARAMETER ::   jpphy =  8    !: phytoplancton concentration  
    100    INTEGER, PUBLIC, PARAMETER ::   jpzoo =  9    !: zooplancton concentration 
    101    INTEGER, PUBLIC, PARAMETER ::   jpdoc = 10    !: dissolved organic carbon concentration  
    102    INTEGER, PUBLIC, PARAMETER ::   jpdia = 11    !: Diatoms Concentration 
    103    INTEGER, PUBLIC, PARAMETER ::   jpmes = 12    !: Mesozooplankton Concentration 
    104    INTEGER, PUBLIC, PARAMETER ::   jpdsi = 13    !: Diatoms Silicate Concentration 
    105    INTEGER, PUBLIC, PARAMETER ::   jpfer = 14    !: Iron Concentration 
    106    INTEGER, PUBLIC, PARAMETER ::   jpbfe = 15    !: Big iron particles Concentration 
    107    INTEGER, PUBLIC, PARAMETER ::   jpgoc = 16    !: big particulate organic phosphate concentration 
    108    INTEGER, PUBLIC, PARAMETER ::   jpsfe = 17    !: Small iron particles Concentration 
    109    INTEGER, PUBLIC, PARAMETER ::   jpdfe = 18    !: Diatoms iron Concentration 
    110    INTEGER, PUBLIC, PARAMETER ::   jpgsi = 19    !: (big) Silicate Concentration 
    111    INTEGER, PUBLIC, PARAMETER ::   jpnfe = 20    !: Nano iron Concentration 
    112    INTEGER, PUBLIC, PARAMETER ::   jpnch = 21    !: Nano Chlorophyll Concentration 
    113    INTEGER, PUBLIC, PARAMETER ::   jpdch = 22    !: Diatoms Chlorophyll Concentration 
    114    INTEGER, PUBLIC, PARAMETER ::   jpno3 = 23    !: Nitrates Concentration 
    115    INTEGER, PUBLIC, PARAMETER ::   jpnh4 = 24    !: Ammonium Concentration 
    116  
    117 #else 
    11864   !!--------------------------------------------------------------------- 
    11965   !!   Default                                   No CFC geochemical model 
    120    !!--------------------------------------------------------------------- 
    121    LOGICAL, PUBLIC, PARAMETER ::   lk_pisces     = .FALSE.  !: PISCES flag  
    122    LOGICAL, PUBLIC, PARAMETER ::   lk_p4z        = .FALSE.  !: p4z flag  
    123    INTEGER, PUBLIC, PARAMETER ::   jp_pisces     =  0       !: No CFC tracers 
    124    INTEGER, PUBLIC, PARAMETER ::   jp_pisces_2d  =  0       !: No CFC additional 2d output arrays  
    125    INTEGER, PUBLIC, PARAMETER ::   jp_pisces_3d  =  0       !: No CFC additional 3d output arrays  
    126    INTEGER, PUBLIC, PARAMETER ::   jp_pisces_trd =  0       !: number of sms trends for PISCES 
    127 #endif 
    128  
    12966   ! Starting/ending PISCES do-loop indices (N.B. no PISCES : jpl_pcs < jpf_pcs the do-loop are never done) 
    130    INTEGER, PUBLIC, PARAMETER ::   jp_pcs0     = 1                  !: First index of PISCES tracers 
    131    INTEGER, PUBLIC, PARAMETER ::   jp_pcs1     = jp_pisces          !: Last  index of PISCES tracers 
    132    INTEGER, PUBLIC, PARAMETER ::   jp_pcs0_2d  = 1               !: First index of 2D diag 
    133    INTEGER, PUBLIC, PARAMETER ::   jp_pcs1_2d  = jp_pisces_2d    !: Last  index of 2D diag 
    134    INTEGER, PUBLIC, PARAMETER ::   jp_pcs0_3d  = 1               !: First index of 3D diag 
    135    INTEGER, PUBLIC, PARAMETER ::   jp_pcs1_3d  = jp_pisces_3d    !: Last  index of 3d diag 
    136    INTEGER, PUBLIC, PARAMETER ::   jp_pcs0_trd = 1              !: First index of bio diag 
    137    INTEGER, PUBLIC, PARAMETER ::   jp_pcs1_trd = jp_pisces_trd  !: Last  index of bio diag 
    138  
     67   INTEGER, PUBLIC  ::   jp_pcs0  !: First index of PISCES tracers 
     68   INTEGER, PUBLIC  ::   jp_pcs1  !: Last  index of PISCES tracers 
    13969 
    14070   !!====================================================================== 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/sms_pisces.F90

    r6291 r7403  
    66   !! History :   1.0  !  2000-02 (O. Aumont) original code 
    77   !!             3.2  !  2009-04 (C. Ethe & NEMO team) style 
    8    !!---------------------------------------------------------------------- 
    9 #if defined key_pisces || defined key_pisces_reduced  
    10    !!---------------------------------------------------------------------- 
    11    !!   'key_pisces'                                         PISCES model 
    128   !!---------------------------------------------------------------------- 
    139   USE par_oce 
     
    2117   INTEGER ::   numonp      = -1           !! Logical unit for namelist pisces output 
    2218 
    23    !!*  Biological fluxes for light : variables shared by pisces & lobster 
    24    INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  neln  !: number of T-levels + 1 in the euphotic layer 
    25    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  heup  !: euphotic layer depth 
    26    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  etot  !: par (photosynthetic available radiation) 
    27    ! 
    28    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  xksi  !:  LOBSTER : zooplakton closure 
    2919   !                                                       !:  PISCES  : silicon dependant half saturation 
    3020 
    31 #if defined key_pisces  
     21   !!* Model used 
     22   LOGICAL  ::  ln_p2z            !: Flag to use LOBSTER model 
     23   LOGICAL  ::  ln_p4z            !: Flag to use PISCES  model 
     24   LOGICAL  ::  ln_p5z            !: Flag to use PISCES  quota model 
     25   LOGICAL  ::  ln_ligand         !: Flag to enable organic ligands 
     26 
    3227   !!*  Time variables 
    3328   INTEGER  ::   nrdttrc           !: ??? 
     
    4944   REAL(wp) ::   o2nit             !: ??? 
    5045   REAL(wp) ::   wsbio, wsbio2     !: ??? 
     46   REAL(wp) ::   wsbio2max         !: ??? 
     47   REAL(wp) ::   wsbio2scale       !: ??? 
    5148   REAL(wp) ::   xkmort            !: ??? 
    5249   REAL(wp) ::   ferat3            !: ??? 
     50   REAL(wp) ::   wfep              !: ??? 
     51   REAL(wp) ::   ldocp             !: ??? 
     52   REAL(wp) ::   ldocz             !: ??? 
     53   REAL(wp) ::   lthet             !: ??? 
     54   REAL(wp) ::   no3rat3           !: ??? 
     55   REAL(wp) ::   po4rat3           !: ??? 
     56 
    5357 
    5458   !!*  diagnostic parameters  
     
    6670   LOGICAL  ::  ln_check_mass      !: Flag to check mass conservation 
    6771 
     72   !!*  Biological fluxes for light : variables shared by pisces & lobster 
     73   INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  neln  !: number of T-levels + 1 in the euphotic layer 
     74   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  heup  !: euphotic layer depth 
     75   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  etot  !: par (photosynthetic available radiation) 
     76   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  etot_ndcy      !: PAR over 24h in case of diurnal cycle 
     77   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  enano, ediat   !: PAR for phyto, nano and diat  
     78   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  epico          !: PAR for pico 
     79   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  emoy           !: averaged PAR in the mixed layer 
     80   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  heup_01 !: Absolute euphotic layer depth 
     81   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)   ::  xksi  !:  LOBSTER : zooplakton closure 
     82 
    6883   !!*  Biological fluxes for primary production 
    69    REAL(wp), ALLOCATABLE, SAVE,   DIMENSION(:,:)  ::   xksimax    !: ??? 
    70    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanono3   !: ??? 
    71    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatno3   !: ??? 
    72    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanonh4   !: ??? 
    73    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatnh4   !: ??? 
    74    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xnanopo4   !: ??? 
    75    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xdiatpo4   !: ??? 
    76    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimphy    !: ??? 
    77    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdia    !: ??? 
    78    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   concdfe    !: ??? 
    79    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   concnfe    !: ??? 
    80    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimnfe    !: ??? 
    81    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimdfe    !: ??? 
    82    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   xlimsi     !: ??? 
     84   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:)    ::   xksimax    !: ??? 
    8385   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   biron      !: bioavailable fraction of iron 
     86   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:)  ::   plig       !: proportion of iron organically complexed 
     87 
     88   !!*  Sinking speed 
     89   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   wsbio3   !: POC sinking speed  
     90   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   wsbio4   !: GOC sinking speed 
     91   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   wscal    !: Calcite and BSi sinking speeds 
     92   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   wsfep 
     93 
    8494 
    8595 
     
    8797   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xfracal    !: ?? 
    8898   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   nitrfac    !: ?? 
    89    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xlimbac    !: ?? 
    90    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xlimbacl   !: ?? 
     99   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   orem       !: ?? 
    91100   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xdiss      !: ?? 
    92101   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prodcal    !: Calcite production 
     102   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prodpoc    !: Calcite production 
     103   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   conspoc    !: Calcite production 
     104   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   prodgoc    !: Calcite production 
     105   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   consgoc    !: Calcite production 
     106 
     107   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sizen      !: size of diatoms  
     108   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sizep      !: size of diatoms  
     109   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   sized      !: size of diatoms  
     110 
    93111 
    94112   !!* Variable for chemistry of the CO2 cycle 
    95    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   akb3       !: ??? 
    96113   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ak13       !: ??? 
    97114   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   ak23       !: ??? 
    98115   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   aksp       !: ??? 
    99    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   akw3       !: ??? 
    100    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   borat      !: ??? 
    101116   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   hi         !: ??? 
    102117   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   excess     !: ??? 
     
    108123   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   tgfunc2   !: Temp. dependancy of mesozooplankton rates 
    109124 
    110 #if defined key_kriest 
    111    !!*  Kriest parameter for aggregation 
    112    REAL(wp) ::   xkr_eta                            !: Sinking  exponent  
    113    REAL(wp) ::   xkr_zeta                           !:  N content exponent  
    114    REAL(wp) ::   xkr_ncontent                       !:  N content factor    
    115    REAL(wp) ::   xkr_massp                          !:  
    116    REAL(wp) ::   xkr_mass_min, xkr_mass_max         !:  Minimum, Maximum mass for Aggregates  
     125#if defined key_sed 
     126   LOGICAL, PUBLIC, PARAMETER ::   lk_sed = .TRUE.     !: sediment flag 
     127#else 
     128   LOGICAL, PUBLIC, PARAMETER ::   lk_sed = .FALSE.     !: sediment flag 
    117129#endif 
    118130 
    119 #endif 
    120131   !!---------------------------------------------------------------------- 
    121132   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
     
    124135   !!---------------------------------------------------------------------- 
    125136CONTAINS 
     137 
    126138 
    127139   INTEGER FUNCTION sms_pisces_alloc() 
     
    130142      !!---------------------------------------------------------------------- 
    131143      USE lib_mpp , ONLY: ctl_warn 
    132       INTEGER ::   ierr(5)        ! Local variables 
     144      INTEGER ::   ierr(10)        ! Local variables 
    133145      !!---------------------------------------------------------------------- 
    134146      ierr(:) = 0 
    135147      !*  Biological fluxes for light : shared variables for pisces & lobster 
    136       ALLOCATE( etot(jpi,jpj,jpk), neln(jpi,jpj), heup(jpi,jpj), xksi(jpi,jpj), STAT=ierr(1) ) 
    137       ! 
    138 #if defined key_pisces 
    139       !*  Biological fluxes for primary production 
    140       ALLOCATE( xksimax(jpi,jpj)     , biron   (jpi,jpj,jpk),       & 
    141          &      xnanono3(jpi,jpj,jpk), xdiatno3(jpi,jpj,jpk),       & 
    142          &      xnanonh4(jpi,jpj,jpk), xdiatnh4(jpi,jpj,jpk),       & 
    143          &      xnanopo4(jpi,jpj,jpk), xdiatpo4(jpi,jpj,jpk),       & 
    144          &      xlimphy (jpi,jpj,jpk), xlimdia (jpi,jpj,jpk),       & 
    145          &      xlimnfe (jpi,jpj,jpk), xlimdfe (jpi,jpj,jpk),       & 
    146          &      xlimsi  (jpi,jpj,jpk), concdfe (jpi,jpj,jpk),       & 
    147          &      concnfe (jpi,jpj,jpk),                           STAT=ierr(2) )  
    148          ! 
    149       !*  SMS for the organic matter 
    150       ALLOCATE( xfracal (jpi,jpj,jpk), nitrfac(jpi,jpj,jpk),       & 
    151          &      xlimbac (jpi,jpj,jpk), xdiss  (jpi,jpj,jpk),       &  
    152          &      xlimbacl(jpi,jpj,jpk), prodcal(jpi,jpj,jpk),     STAT=ierr(3) ) 
    153  
    154       !* Variable for chemistry of the CO2 cycle 
    155       ALLOCATE( akb3(jpi,jpj,jpk)    , ak13  (jpi,jpj,jpk) ,       & 
    156          &      ak23(jpi,jpj,jpk)    , aksp  (jpi,jpj,jpk) ,       & 
    157          &      akw3(jpi,jpj,jpk)    , borat (jpi,jpj,jpk) ,       & 
    158          &      hi  (jpi,jpj,jpk)    , excess(jpi,jpj,jpk) ,       & 
    159          &      aphscale(jpi,jpj,jpk),                           STAT=ierr(4) ) 
    160          ! 
    161       !* Temperature dependancy of SMS terms 
    162       ALLOCATE( tgfunc(jpi,jpj,jpk)  , tgfunc2(jpi,jpj,jpk) ,    STAT=ierr(5) ) 
    163          ! 
    164 #endif 
     148      ALLOCATE( etot(jpi,jpj,jpk), neln(jpi,jpj), heup(jpi,jpj),    & 
     149        &       heup_01(jpi,jpj) , xksi(jpi,jpj)               ,  STAT=ierr(1) ) 
     150      ! 
     151   
     152      IF( ln_p4z .OR. ln_p5z ) THEN 
     153         !*  Biological fluxes for light  
     154         ALLOCATE(  enano(jpi,jpj,jpk)    , ediat(jpi,jpj,jpk) ,   & 
     155           &        etot_ndcy(jpi,jpj,jpk), emoy(jpi,jpj,jpk)  ,  STAT=ierr(2) )  
     156 
     157         !*  Biological fluxes for primary production 
     158         ALLOCATE( xksimax(jpi,jpj)  , biron(jpi,jpj,jpk)      ,  STAT=ierr(3) ) 
     159         ! 
     160         !*  SMS for the organic matter 
     161         ALLOCATE( xfracal (jpi,jpj,jpk), nitrfac(jpi,jpj,jpk) ,    & 
     162            &      orem    (jpi,jpj,jpk),                           & 
     163            &      prodcal(jpi,jpj,jpk),  xdiss   (jpi,jpj,jpk),    & 
     164            &      prodpoc(jpi,jpj,jpk) , conspoc(jpi,jpj,jpk) ,    & 
     165            &      prodgoc(jpi,jpj,jpk) , consgoc(jpi,jpj,jpk) ,  STAT=ierr(4) ) 
     166 
     167         !* Variable for chemistry of the CO2 cycle 
     168         ALLOCATE( ak13  (jpi,jpj,jpk) ,                            & 
     169            &      ak23(jpi,jpj,jpk)    , aksp  (jpi,jpj,jpk) ,     & 
     170            &      hi  (jpi,jpj,jpk)    , excess(jpi,jpj,jpk) ,     & 
     171            &      aphscale(jpi,jpj,jpk),                         STAT=ierr(5) ) 
     172         ! 
     173         !* Temperature dependancy of SMS terms 
     174         ALLOCATE( tgfunc(jpi,jpj,jpk)  , tgfunc2(jpi,jpj,jpk),   STAT=ierr(6) ) 
     175         ! 
     176         !* Sinkong speed 
     177         ALLOCATE( wsbio3 (jpi,jpj,jpk) , wsbio4 (jpi,jpj,jpk),     & 
     178            &      wscal(jpi,jpj,jpk)                         ,   STAT=ierr(7) )    
     179         !  
     180         IF( ln_ligand ) THEN 
     181           ALLOCATE( plig(jpi,jpj,jpk)  , wsfep(jpi,jpj,jpk)  ,   STAT=ierr(8) ) 
     182         ENDIF 
     183         ! 
     184      ENDIF 
     185      ! 
     186      IF( ln_p5z ) THEN 
     187         !        
     188         ALLOCATE( epico(jpi,jpj,jpk)                         ,   STAT=ierr(9) )  
     189 
     190         !*  Size of phytoplankton cells 
     191         ALLOCATE( sizen(jpi,jpj,jpk), sizep(jpi,jpj,jpk),         & 
     192           &       sized(jpi,jpj,jpk),                            STAT=ierr(10) ) 
     193      ENDIF 
    165194      ! 
    166195      sms_pisces_alloc = MAXVAL( ierr ) 
     
    170199   END FUNCTION sms_pisces_alloc 
    171200 
    172 #else 
    173    !!----------------------------------------------------------------------    
    174    !!  Empty module :                                     NO PISCES model 
    175    !!---------------------------------------------------------------------- 
    176 #endif 
    177     
    178201   !!======================================================================    
    179202END MODULE sms_pisces     
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/trcice_pisces.F90

    r5725 r7403  
    55   !!====================================================================== 
    66   !! History :  3.5  ! 2013    (M. Vancoppenolle, O. Aumont, G. Madec), original code 
    7    !! Comment ! probably not properly done when the second particle export 
    8    !! scheme (kriest) is used 
    9    !!---------------------------------------------------------------------- 
    10 #if defined key_pisces || defined key_pisces_reduced 
    11    !!---------------------------------------------------------------------- 
    12    !!   'key_pisces'                                       PISCES bio-model 
    137   !!---------------------------------------------------------------------- 
    148   !! trc_ice_pisces   : PISCES fake sea ice model setting 
     
    1812   USE oce_trc         ! Shared variables between ocean and passive tracers 
    1913   USE trc             ! Passive tracers common variables  
    20    USE phycst          ! Ocean physics parameters 
    2114   USE sms_pisces      ! PISCES Source Minus Sink variables 
    2215   USE in_out_manager 
     
    3730      !!---------------------------------------------------------------------- 
    3831 
    39       IF( lk_p4z ) THEN  ;   CALL p4z_ice_ini   !  PISCES 
    40       ELSE               ;   CALL p2z_ice_ini   !  LOBSTER 
     32      IF( ln_p4z .OR. ln_p5z ) THEN  ;   CALL p4z_ice_ini   !  PISCES 
     33      ELSE                           ;   CALL p2z_ice_ini   !  LOBSTER 
    4134      ENDIF 
    4235 
     
    4538 
    4639   SUBROUTINE p4z_ice_ini 
    47  
    48 #if defined key_pisces  
    4940      !!---------------------------------------------------------------------- 
    5041      !!                   ***  ROUTINE p4z_ice_ini *** 
     
    7566 
    7667                                        !--- Dummy variables 
    77       REAL(wp), DIMENSION(jp_pisces,2) :: zratio  ! effective ice-ocean tracer cc ratio 
    78       REAL(wp), DIMENSION(jp_pisces,4) :: zpisc   ! prescribes concentration  
     68      REAL(wp), DIMENSION(jpmaxtrc,2) :: zratio  ! effective ice-ocean tracer cc ratio 
     69      REAL(wp), DIMENSION(jpmaxtrc,4) :: zpisc   ! prescribes concentration  
    7970      !                                            !  1:global, 2:Arctic, 3:Antarctic, 4:Baltic 
    8071 
     
    10798      zpisc(jppo4,1) =  5.77e-7_wp / po4r  
    10899      zpisc(jppoc,1) =  1.27e-6_wp   
    109 #  if ! defined key_kriest 
    110100      zpisc(jpgoc,1) =  5.23e-8_wp   
    111101      zpisc(jpbfe,1) =  9.84e-13_wp  
    112 #  else 
    113       zpisc(jpnum,1) = 0. ! could not get this value since did not use it 
    114 #  endif 
    115102      zpisc(jpsil,1) =  7.36e-6_wp   
    116103      zpisc(jpdsi,1) =  1.07e-7_wp  
     
    129116      zpisc(jpnh4,1) =  3.22e-7_wp / rno3 
    130117 
     118      ! ln_p5z 
     119      zpisc(jppic,1) =  9.57e-8_wp 
     120      zpisc(jpnpi,1) =  9.57e-8_wp 
     121      zpisc(jpppi,1) =  9.57e-8_wp 
     122      zpisc(jppfe,1) =  1.76e-11_wp 
     123      zpisc(jppch,1) =  1.67e-7_wp 
     124      zpisc(jpnph,1) =  9.57e-8_wp 
     125      zpisc(jppph,1) =  9.57e-8_wp 
     126      zpisc(jpndi,1) =  4.24e-7_wp 
     127      zpisc(jppdi,1) =  4.24e-7_wp 
     128      zpisc(jppon,1) =  9.57e-8_wp 
     129      zpisc(jppop,1) =  9.57e-8_wp 
     130      zpisc(jpdon,1) =  2.04e-5_wp 
     131      zpisc(jpdop,1) =  2.04e-5_wp 
     132      zpisc(jpgon,1) =  5.23e-8_wp 
     133      zpisc(jpgop,1) =  5.23e-8_wp 
     134 
    131135      !--- Arctic specificities (dissolved inorganic & DOM) 
    132136      zpisc(jpdic,2) =  1.98e-3_wp  
     
    137141      zpisc(jppo4,2) =  4.09e-7_wp / po4r  
    138142      zpisc(jppoc,2) =  4.05e-7_wp   
    139 #  if ! defined key_kriest 
    140143      zpisc(jpgoc,2) =  2.84e-8_wp   
    141144      zpisc(jpbfe,2) =  7.03e-13_wp  
    142 #  else 
    143       zpisc(jpnum,2) =  0.00e-00_wp  
    144 #  endif 
    145145      zpisc(jpsil,2) =  6.87e-6_wp   
    146146      zpisc(jpdsi,2) =  1.73e-7_wp  
     
    159159      zpisc(jpnh4,2) =  6.15e-08_wp / rno3  
    160160 
     161      ! ln_p5z 
     162      zpisc(jppic,2) =  5.25e-7_wp 
     163      zpisc(jpnpi,2) =  5.25e-7_wp 
     164      zpisc(jpppi,2) =  5.25e-7_wp 
     165      zpisc(jppfe,2) =  1.75e-11_wp 
     166      zpisc(jppch,2) =  1.46e-07_wp 
     167      zpisc(jpnph,2) =  5.25e-7_wp 
     168      zpisc(jppph,2) =  5.25e-7_wp 
     169      zpisc(jpndi,2) =  7.75e-7_wp 
     170      zpisc(jppdi,2) =  7.75e-7_wp 
     171      zpisc(jppon,2) =  4.05e-7_wp 
     172      zpisc(jppop,2) =  4.05e-7_wp 
     173      zpisc(jpdon,2) =  6.00e-6_wp 
     174      zpisc(jpdop,2) =  6.00e-6_wp 
     175      zpisc(jpgon,2) =  2.84e-8_wp 
     176      zpisc(jpgop,2) =  2.84e-8_wp 
     177 
    161178      !--- Antarctic specificities (dissolved inorganic & DOM) 
    162179      zpisc(jpdic,3) =  2.20e-3_wp   
     
    167184      zpisc(jppo4,3) =  1.88e-6_wp / po4r   
    168185      zpisc(jppoc,3) =  1.13e-6_wp   
    169 #  if ! defined key_kriest 
    170186      zpisc(jpgoc,3) =  2.89e-8_wp   
    171187      zpisc(jpbfe,3) =  5.63e-13_wp  
    172 #  else 
    173       zpisc(jpnum,3) =  0.00e-00_wp  
    174 #  endif 
    175188      zpisc(jpsil,3) =  4.96e-5_wp   
    176189      zpisc(jpdsi,3) =  5.63e-7_wp  
     
    189202      zpisc(jpnh4,3) =  3.39e-7_wp / rno3   
    190203 
     204      ! ln_p5z 
     205      zpisc(jppic,3) =  8.10e-7_wp 
     206      zpisc(jpnpi,3) =  8.10e-7_wp 
     207      zpisc(jpppi,3) =  8.10e-7_wp  
     208      zpisc(jppfe,3) =  1.48e-11_wp 
     209      zpisc(jppch,3) =  2.02e-7_wp 
     210      zpisc(jpnph,3) =  9.57e-8_wp 
     211      zpisc(jppph,3) =  9.57e-8_wp 
     212      zpisc(jpndi,3) =  5.77e-7_wp 
     213      zpisc(jppdi,3) =  5.77e-7_wp 
     214      zpisc(jppon,3) =  1.13e-6_wp 
     215      zpisc(jppop,3) =  1.13e-6_wp 
     216      zpisc(jpdon,3) =  7.02e-6_wp 
     217      zpisc(jpdop,3) =  7.02e-6_wp 
     218      zpisc(jpgon,3) =  2.89e-8_wp 
     219      zpisc(jpgop,3) =  2.89e-8_wp 
     220 
     221 
    191222      !--- Baltic Sea particular case for ORCA configurations 
    192223      zpisc(jpdic,4) = 1.14e-3_wp 
     
    197228      zpisc(jppo4,4) = 2.85e-9_wp / po4r 
    198229      zpisc(jppoc,4) = 4.84e-7_wp 
    199 #  if ! defined key_kriest 
    200230      zpisc(jpgoc,4) = 1.05e-8_wp 
    201231      zpisc(jpbfe,4) = 4.97e-13_wp 
    202 #  else 
    203       zpisc(jpnum,4) = 0. ! could not get this value 
    204 #  endif 
    205232      zpisc(jpsil,4) = 4.91e-5_wp 
    206233      zpisc(jpdsi,4) = 3.25e-7_wp 
     
    218245      zpisc(jpno3,4) = 5.36e-5_wp / rno3 
    219246      zpisc(jpnh4,4) = 7.18e-7_wp / rno3 
     247 
     248      ! ln_p5z 
     249      zpisc(jppic,4) =  6.64e-7_wp 
     250      zpisc(jpnpi,4) =  6.64e-7_wp 
     251      zpisc(jpppi,4) =  6.64e-7_wp 
     252      zpisc(jppfe,4) =  3.89e-11_wp 
     253      zpisc(jppch,4) =  1.17e-7_wp 
     254      zpisc(jpnph,4) =  6.64e-7_wp 
     255      zpisc(jppph,4) =  6.64e-7_wp 
     256      zpisc(jpndi,4) =  3.41e-7_wp 
     257      zpisc(jppdi,4) =  3.41e-7_wp 
     258      zpisc(jppon,4) =  4.84e-7_wp 
     259      zpisc(jppop,4) =  4.84e-7_wp 
     260      zpisc(jpdon,4) =  1.06e-5_wp 
     261      zpisc(jpdop,4) =  1.06e-5_wp 
     262      zpisc(jpgon,4) =  1.05e-8_wp 
     263      zpisc(jpgop,4) =  1.05e-8_wp 
    220264  
    221265      DO jn = jp_pcs0, jp_pcs1 
     
    279323      ! 
    280324      END DO ! jn 
    281 #endif 
    282  
     325      ! 
    283326   END SUBROUTINE p4z_ice_ini 
    284327 
    285328   SUBROUTINE p2z_ice_ini 
    286 #if defined key_pisces_reduced  
    287329      !!---------------------------------------------------------------------- 
    288330      !!                   ***  ROUTINE p2z_ice_ini *** 
     
    290332      !! ** Purpose :   Initialisation of the LOBSTER biochemical model 
    291333      !!---------------------------------------------------------------------- 
    292 #endif 
    293334   END SUBROUTINE p2z_ice_ini 
    294335 
    295  
    296 #else 
    297    !!---------------------------------------------------------------------- 
    298    !!   Dummy module                            No PISCES biochemical model 
    299    !!---------------------------------------------------------------------- 
    300 CONTAINS 
    301    SUBROUTINE trc_ice_ini_pisces         ! Empty routine 
    302    END SUBROUTINE trc_ice_ini_pisces 
    303 #endif 
    304336 
    305337   !!====================================================================== 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/trcini_pisces.F90

    r6325 r7403  
    1111   !!             3.5  !  2012-05  (C. Ethe) Merge PISCES-LOBSTER 
    1212   !!---------------------------------------------------------------------- 
    13 #if defined key_pisces || defined key_pisces_reduced 
    14    !!---------------------------------------------------------------------- 
    15    !!   'key_pisces'                                       PISCES bio-model 
    16    !!---------------------------------------------------------------------- 
    1713   !! trc_ini_pisces   : PISCES biochemical model initialisation 
    1814   !!---------------------------------------------------------------------- 
    19    USE par_trc         ! TOP parameters 
     15   USE par_trc         !  TOP parameters 
    2016   USE oce_trc         !  shared variables between ocean and passive tracers 
    2117   USE trc             !  passive tracers common variables  
     18   USE trcnam_pisces   !  PISCES namelist 
    2219   USE sms_pisces      !  PISCES Source Minus Sink variables 
    2320 
     
    4138      !!---------------------------------------------------------------------- 
    4239 
    43       IF( lk_p4z ) THEN  ;   CALL p4z_ini   !  PISCES 
    44       ELSE               ;   CALL p2z_ini   !  LOBSTER 
     40      ! 
     41      CALL trc_nam_pisces 
     42      ! 
     43      IF( ln_p4z .OR. ln_p5z ) THEN  ;   CALL p4z_ini   !  PISCES 
     44      ELSE                           ;   CALL p2z_ini   !  LOBSTER 
    4545      ENDIF 
    4646 
     
    5353      !! ** Purpose :   Initialisation of the PISCES biochemical model 
    5454      !!---------------------------------------------------------------------- 
    55 #if defined key_pisces  
    5655      ! 
    5756      USE p4zsms          ! Main P4Z routine 
     
    7069      USE p4zlys          !  Calcite saturation 
    7170      USE p4zsed          !  Sedimentation & burial 
     71      USE p4zpoc          !  Remineralization of organic particles 
     72      USE p4zligand       !  Remineralization of organic ligands 
     73      USE p5zlim          !  Co-limitations of differents nutrients 
     74      USE p5zprod         !  Growth rate of the 2 phyto groups 
     75      USE p5zmicro        !  Sources and sinks of microzooplankton 
     76      USE p5zmeso         !  Sources and sinks of mesozooplankton 
     77      USE p5zmort         !  Mortality terms for phytoplankton 
     78 
    7279      ! 
    7380      REAL(wp), SAVE :: sco2   =  2.312e-3_wp 
     
    7986      REAL(wp), SAVE :: no3    =  30.9e-6_wp * 7.625_wp 
    8087      ! 
    81       INTEGER  ::  ji, jj, jk, ierr 
     88      INTEGER  ::  ji, jj, jk, jn, ierr 
    8289      REAL(wp) ::  zcaralk, zbicarb, zco3 
    8390      REAL(wp) ::  ztmas, ztmas1 
    84       !!---------------------------------------------------------------------- 
    85  
    86       IF(lwp) WRITE(numout,*) 
    87       IF(lwp) WRITE(numout,*) ' p4z_ini :   PISCES biochemical model initialisation' 
    88       IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 
    89  
    90                                                  ! Allocate PISCES arrays 
     91      CHARACTER(len = 20)  ::  cltra 
     92 
     93      !!---------------------------------------------------------------------- 
     94 
     95      IF(lwp) THEN 
     96         WRITE(numout,*) 
     97         IF( ln_p4z ) THEN  
     98            WRITE(numout,*) ' p4z_ini :   PISCES biochemical model initialisation' 
     99         ELSE 
     100            WRITE(numout,*) ' p5z_ini :   PISCES biochemical model initialisation' 
     101            WRITE(numout,*) '             With variable stoichiometry' 
     102         ENDIF 
     103         WRITE(numout,*) ' ~~~~~~~~~~~~~~' 
     104      ENDIF 
     105      ! 
     106      ! Allocate PISCES arrays 
    91107      ierr =         sms_pisces_alloc()           
    92108      ierr = ierr +  p4z_che_alloc() 
    93109      ierr = ierr +  p4z_sink_alloc() 
    94110      ierr = ierr +  p4z_opt_alloc() 
    95       ierr = ierr +  p4z_prod_alloc() 
    96       ierr = ierr +  p4z_rem_alloc() 
    97111      ierr = ierr +  p4z_flx_alloc() 
    98112      ierr = ierr +  p4z_sed_alloc() 
     113      ierr = ierr +  p4z_rem_alloc() 
     114      IF( ln_p4z ) THEN 
     115         ierr = ierr +  p4z_lim_alloc() 
     116         ierr = ierr +  p4z_prod_alloc() 
     117      ELSE 
     118         ierr = ierr +  p5z_lim_alloc() 
     119         ierr = ierr +  p5z_prod_alloc() 
     120      ENDIF 
    99121      ! 
    100122      IF( lk_mpp    )   CALL mpp_sum( ierr ) 
     
    104126      r1_ryyss = 1. / ryyss 
    105127      ! 
     128 
     129      ! assign an index in trc arrays for each prognostic variables 
     130      DO jn = 1, jptra 
     131        cltra = ctrcnm(jn)  
     132        IF( cltra == 'DIC'      )   jpdic = jn      !: dissolved inoganic carbon concentration  
     133        IF( cltra == 'Alkalini' )   jptal = jn      !: total alkalinity  
     134        IF( cltra == 'O2'       )   jpoxy = jn      !: oxygen carbon concentration  
     135        IF( cltra == 'CaCO3'    )   jpcal = jn      !: calcite  concentration  
     136        IF( cltra == 'PO4'      )   jppo4 = jn      !: phosphate concentration  
     137        IF( cltra == 'POC'      )   jppoc = jn      !: small particulate organic phosphate concentration 
     138        IF( cltra == 'Si'       )   jpsil = jn      !: silicate concentration 
     139        IF( cltra == 'PHY'      )   jpphy = jn      !: phytoplancton concentration  
     140        IF( cltra == 'ZOO'      )   jpzoo = jn      !: zooplancton concentration 
     141        IF( cltra == 'DOC'      )   jpdoc = jn      !: dissolved organic carbon concentration  
     142        IF( cltra == 'PHY2'     )   jpdia = jn      !: Diatoms Concentration 
     143        IF( cltra == 'ZOO2'     )   jpmes = jn      !: Mesozooplankton Concentration 
     144        IF( cltra == 'DSi'      )   jpdsi = jn      !: Diatoms Silicate Concentration 
     145        IF( cltra == 'Fer'      )   jpfer = jn      !: Iron Concentration 
     146        IF( cltra == 'BFe'      )   jpbfe = jn      !: Big iron particles Concentration 
     147        IF( cltra == 'GOC'      )   jpgoc = jn      !: Big particulate organic phosphate concentration 
     148        IF( cltra == 'SFe'      )   jpsfe = jn      !: Small iron particles Concentration 
     149        IF( cltra == 'DFe'      )   jpdfe = jn      !: Diatoms iron Concentration 
     150        IF( cltra == 'GSi'      )   jpgsi = jn      !: (big) Silicate Concentration 
     151        IF( cltra == 'NFe'      )   jpnfe = jn      !: Nano iron Concentration 
     152        IF( cltra == 'NCHL'     )   jpnch = jn      !: Nano Chlorophyll Concentration 
     153        IF( cltra == 'DCHL'     )   jpdch = jn      !: Diatoms Chlorophyll Concentration 
     154        IF( cltra == 'NO3'      )   jpno3 = jn      !: Nitrates Concentration 
     155        IF( cltra == 'NH4'      )   jpnh4 = jn      !: Ammonium Concentration 
     156        IF( cltra == 'DON'      )   jpdon = jn      !: Dissolved organic N Concentration 
     157        IF( cltra == 'DOP'      )   jpdop = jn      !: Dissolved organic P Concentration 
     158        IF( cltra == 'PON'      )   jppon = jn      !: Small Nitrogen particle Concentration 
     159        IF( cltra == 'POP'      )   jppop = jn      !: Small Phosphorus particle Concentration 
     160        IF( cltra == 'GON'      )   jpgon = jn      !: Big Nitrogen particles Concentration 
     161        IF( cltra == 'GOP'      )   jpgop = jn      !: Big Phosphorus Concentration 
     162        IF( cltra == 'PHYN'     )   jpnph = jn      !: Nanophytoplankton N biomass 
     163        IF( cltra == 'PHYP'     )   jppph = jn      !: Nanophytoplankton P biomass 
     164        IF( cltra == 'DIAN'     )   jpndi = jn      !: Diatoms N biomass 
     165        IF( cltra == 'DIAP'     )   jppdi = jn      !: Diatoms P biomass 
     166        IF( cltra == 'PIC'      )   jppic = jn      !: Picophytoplankton C biomass 
     167        IF( cltra == 'PICN'     )   jpnpi = jn      !: Picophytoplankton N biomass 
     168        IF( cltra == 'PICP'     )   jpppi = jn      !: Picophytoplankton P biomass 
     169        IF( cltra == 'PFe'      )   jppfe = jn      !: Picophytoplankton Fe biomass 
     170        IF( cltra == 'LGW'      )   jplgw = jn      !: Weak ligands 
     171        IF( cltra == 'LFe'      )   jpfep = jn      !: Fe nanoparticle 
     172      ENDDO 
    106173 
    107174      CALL p4z_sms_init       !  Maint routine 
     
    116183      rdenit  =  ( ( o2ut + o2nit ) * 0.80 - rno3 - rno3 * 0.60 ) / rno3 
    117184      rdenita =   3._wp /  5._wp 
    118  
     185      IF( ln_p5z ) THEN 
     186         no3rat3 = no3rat3 / rno3 
     187         po4rat3 = po4rat3 / po4r 
     188      ENDIF 
    119189 
    120190      ! Initialization of tracer concentration in case of  no restart  
    121191      !-------------------------------------------------------------- 
    122       IF( .NOT. ln_rsttr ) THEN   
    123           
     192      IF( .NOT.ln_rsttr ) THEN   
    124193         trn(:,:,:,jpdic) = sco2 
    125194         trn(:,:,:,jpdoc) = bioma0 
     
    129198         trn(:,:,:,jppo4) = po4 / po4r 
    130199         trn(:,:,:,jppoc) = bioma0 
    131 #  if ! defined key_kriest 
    132200         trn(:,:,:,jpgoc) = bioma0 
    133201         trn(:,:,:,jpbfe) = bioma0 * 5.e-6 
    134 #  else 
    135          trn(:,:,:,jpnum) = bioma0 / ( 6. * xkr_massp ) 
    136 #  endif 
    137202         trn(:,:,:,jpsil) = silic1 
    138203         trn(:,:,:,jpdsi) = bioma0 * 0.15 
     
    150215         trn(:,:,:,jpno3) = no3 
    151216         trn(:,:,:,jpnh4) = bioma0 
    152  
     217         IF( ln_ligand) THEN 
     218            trn(:,:,:,jplgw) = 0.6E-9 
     219            trn(:,:,:,jpfep) = 0. * 5.e-6 
     220         ENDIF 
     221         IF( ln_p5z ) THEN 
     222            trn(:,:,:,jpdon) = bioma0 
     223            trn(:,:,:,jpdop) = bioma0 
     224            trn(:,:,:,jppon) = bioma0 
     225            trn(:,:,:,jppop) = bioma0 
     226            trn(:,:,:,jpgon) = bioma0 
     227            trn(:,:,:,jpgop) = bioma0 
     228            trn(:,:,:,jpnph) = bioma0 
     229            trn(:,:,:,jppph) = bioma0 
     230            trn(:,:,:,jppic) = bioma0 
     231            trn(:,:,:,jpnpi) = bioma0 
     232            trn(:,:,:,jpppi) = bioma0 
     233            trn(:,:,:,jpndi) = bioma0 
     234            trn(:,:,:,jppdi) = bioma0 
     235            trn(:,:,:,jppfe) = bioma0 * 5.e-6 
     236            trn(:,:,:,jppch) = bioma0 * 12. / 55. 
     237         ENDIF 
    153238         ! initialize the half saturation constant for silicate 
    154239         ! ---------------------------------------------------- 
     
    158243 
    159244 
    160       CALL p4z_sink_init      !  vertical flux of particulate organic matter 
    161       CALL p4z_opt_init       !  Optic: PAR in the water column 
    162       CALL p4z_lim_init       !  co-limitations by the various nutrients 
    163       CALL p4z_prod_init      !  phytoplankton growth rate over the global ocean. 
    164       CALL p4z_sbc_init       !  boundary conditions 
    165       CALL p4z_fechem_init    !  Iron chemistry 
    166       CALL p4z_rem_init       !  remineralisation 
    167       CALL p4z_mort_init      !  phytoplankton mortality  
    168       CALL p4z_micro_init     !  microzooplankton 
    169       CALL p4z_meso_init      !  mesozooplankton 
    170       CALL p4z_lys_init       !  calcite saturation 
    171       CALL p4z_flx_init       !  gas exchange  
     245      CALL p4z_sink_init         !  vertical flux of particulate organic matter 
     246      CALL p4z_opt_init          !  Optic: PAR in the water column 
     247      IF( ln_p4z ) THEN 
     248         CALL p4z_lim_init       !  co-limitations by the various nutrients 
     249         CALL p4z_prod_init      !  phytoplankton growth rate over the global ocean. 
     250      ELSE 
     251         CALL p5z_lim_init       !  co-limitations by the various nutrients 
     252         CALL p5z_prod_init      !  phytoplankton growth rate over the global ocean. 
     253      ENDIF 
     254      CALL p4z_sbc_init          !  boundary conditions 
     255      CALL p4z_fechem_init       !  Iron chemistry 
     256      CALL p4z_rem_init          !  remineralisation 
     257      CALL p4z_poc_init          !  remineralisation of organic particles 
     258      IF( ln_ligand ) & 
     259         & CALL p4z_ligand_init  !  remineralisation of organic ligands 
     260 
     261      IF( ln_p4z ) THEN 
     262         CALL p4z_mort_init      !  phytoplankton mortality  
     263         CALL p4z_micro_init     !  microzooplankton 
     264         CALL p4z_meso_init      !  mesozooplankton 
     265      ELSE 
     266         CALL p5z_mort_init      !  phytoplankton mortality  
     267         CALL p5z_micro_init     !  microzooplankton 
     268         CALL p5z_meso_init      !  mesozooplankton 
     269      ENDIF 
     270      CALL p4z_lys_init          !  calcite saturation 
     271      IF( .NOT.l_co2cpl ) & 
     272        & CALL p4z_flx_init      !  gas exchange  
    172273 
    173274      ndayflxtr = 0 
     
    176277      IF(lwp) WRITE(numout,*) 'Initialization of PISCES tracers done' 
    177278      IF(lwp) WRITE(numout,*)  
    178 #endif 
    179279      ! 
    180280   END SUBROUTINE p4z_ini 
     
    186286      !! ** Purpose :   Initialisation of the LOBSTER biochemical model 
    187287      !!---------------------------------------------------------------------- 
    188 #if defined key_pisces_reduced  
    189288      ! 
    190289      USE p2zopt 
     
    193292      USE p2zsed 
    194293      ! 
    195       INTEGER  ::  ji, jj, jk, ierr 
     294      INTEGER  ::  ji, jj, jk, jn, ierr 
     295      CHARACTER(len = 10)  ::  cltra 
    196296      !!---------------------------------------------------------------------- 
    197297 
     
    205305      IF( lk_mpp    )   CALL mpp_sum( ierr ) 
    206306      IF( ierr /= 0 )   CALL ctl_stop( 'STOP', 'p2z_ini: unable to allocate LOBSTER arrays' ) 
     307 
     308      DO jn = 1, jptra 
     309        cltra = ctrcnm(jn)  
     310        IF( cltra == 'DET' )   jpdet = jn       !: detritus                    [mmoleN/m3] 
     311        IF( cltra == 'ZOO' )   jpzoo = jn       !: zooplancton concentration   [mmoleN/m3] 
     312        IF( cltra == 'PHY' )   jpphy = jn       !: phytoplancton concentration [mmoleN/m3] 
     313        IF( cltra == 'NO3' )   jpno3 = jn       !: nitrate concentration       [mmoleN/m3] 
     314        IF( cltra == 'NH4' )   jpnh4 = jn       !: ammonium concentration      [mmoleN/m3] 
     315        IF( cltra == 'DOM' )   jpdom = jn       !: dissolved organic matter    [mmoleN/m3] 
     316      ENDDO 
     317 
     318      jpkb = 10        !  last level where depth less than 200 m 
     319      DO jk = jpkm1, 1, -1 
     320         IF( gdept_1d(jk) > 200. ) jpkb = jk  
     321      END DO 
     322      IF (lwp) WRITE(numout,*) 
     323      IF (lwp) WRITE(numout,*) ' first vertical layers where biology is active (200m depth ) ', jpkb 
     324      IF (lwp) WRITE(numout,*) 
     325      jpkbm1 = jpkb - 1 
     326      ! 
     327 
    207328 
    208329      ! LOBSTER initialisation for GYRE : init NO3=f(density) by asklod AS Kremeur 2005-07 
     
    214335         trn(:,:,:,jpphy) = 0.1 * tmask(:,:,:) 
    215336         trn(:,:,:,jpdom) = 1.0 * tmask(:,:,:) 
    216          WHERE( rhd(:,:,:) <= 24.5e-3 )  ;  trn(:,:,:,jpno3 ) = 2._wp * tmask(:,:,:) 
     337         WHERE( rhd(:,:,:) <= 24.5e-3 )  ;  trn(:,:,:,jpno3) = 2._wp * tmask(:,:,:) 
    217338         ELSE WHERE                      ;  trn(:,:,:,jpno3) = ( 15.55 * ( rhd(:,:,:) * 1000. ) - 380.11 ) * tmask(:,:,:) 
    218339         END WHERE                        
     
    227348      IF(lwp) WRITE(numout,*) 'Initialization of LOBSTER tracers done' 
    228349      IF(lwp) WRITE(numout,*)  
    229 #endif 
    230350      ! 
    231351   END SUBROUTINE p2z_ini 
    232 #else 
    233    !!---------------------------------------------------------------------- 
    234    !!   Dummy module                            No PISCES biochemical model 
    235    !!---------------------------------------------------------------------- 
    236 CONTAINS 
    237    SUBROUTINE trc_ini_pisces             ! Empty routine 
    238    END SUBROUTINE trc_ini_pisces 
    239 #endif 
    240352 
    241353   !!====================================================================== 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/trcnam_pisces.F90

    r4990 r7403  
    88   !!             1.0  !  2003-08 (C. Ethe)  module F90 
    99   !!             2.0  !  2007-12  (C. Ethe, G. Madec) from trcnam.pisces.h90 
    10    !!---------------------------------------------------------------------- 
    11 #if defined key_pisces || defined key_pisces_reduced 
    12    !!---------------------------------------------------------------------- 
    13    !!   'key_pisces'   :                                   PISCES bio-model 
    1410   !!---------------------------------------------------------------------- 
    1511   !! trc_nam_pisces       : PISCES model namelist read 
     
    4541      !! ** input   :   file 'namelist.trc.sms' containing the following 
    4642      !!             namelist: natext, natbio, natsms 
    47       !!                       natkriest ("key_kriest") 
    4843      !!---------------------------------------------------------------------- 
    4944      !! 
    5045      INTEGER :: jl, jn 
    51       INTEGER :: ios                 ! Local integer output status for namelist read 
    52       TYPE(DIAG), DIMENSION(jp_pisces_2d)  :: pisdia2d 
    53       TYPE(DIAG), DIMENSION(jp_pisces_3d)  :: pisdia3d 
    54       TYPE(DIAG), DIMENSION(jp_pisces_trd) :: pisdiabio 
     46      INTEGER :: ios, ioptio                 ! Local integer output status for namelist read 
    5547      CHARACTER(LEN=20)   ::   clname 
    5648      !! 
    57       NAMELIST/nampisdia/ pisdia3d, pisdia2d     ! additional diagnostics 
    58 #if defined key_pisces_reduced 
    59       NAMELIST/nampisdbi/ pisdiabio 
    60 #endif 
    61  
     49      NAMELIST/nampismod/ln_p2z, ln_p4z, ln_p5z, ln_ligand 
    6250      !!---------------------------------------------------------------------- 
    6351 
    6452      IF(lwp) WRITE(numout,*) 
    6553      clname = 'namelist_pisces' 
    66 #if defined key_pisces 
     54 
    6755      IF(lwp) WRITE(numout,*) ' trc_nam_pisces : read PISCES namelist' 
    68 #else 
    69       IF(lwp) WRITE(numout,*) ' trc_nam_pisces : read LOBSTER namelist' 
    70 #endif 
    7156      IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 
    7257      CALL ctl_opn( numnatp_ref, TRIM( clname )//'_ref', 'OLD'    , 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 
     
    7459      IF(lwm) CALL ctl_opn( numonp     , 'output.namelist.pis' , 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 
    7560      ! 
    76       IF( .NOT.lk_iomput .AND. ln_diatrc ) THEN 
    77          ! 
    78          ! Namelist nampisdia 
    79          ! ------------------- 
    80          REWIND( numnatp_ref )              ! Namelist nampisdia in reference namelist : Pisces diagnostics 
    81          READ  ( numnatp_ref, nampisdia, IOSTAT = ios, ERR = 901) 
    82 901      IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisdia in reference namelist', lwp ) 
    8361 
    84          REWIND( numnatp_cfg )              ! Namelist nampisdia in configuration namelist : Pisces diagnostics 
    85          READ  ( numnatp_cfg, nampisdia, IOSTAT = ios, ERR = 902 ) 
    86 902      IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisdia in configuration namelist', lwp ) 
    87          IF(lwm) WRITE ( numonp, nampisdia ) 
     62      REWIND( numnatp_ref )              ! Namelist nampisbio in reference namelist : Pisces variables 
     63      READ  ( numnatp_ref, nampismod, IOSTAT = ios, ERR = 901) 
     64901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismod in reference namelist', lwp ) 
    8865 
    89          DO jl = 1, jp_pisces_2d 
    90             jn = jp_pcs0_2d + jl - 1 
    91             ctrc2d(jn) = pisdia2d(jl)%sname 
    92             ctrc2l(jn) = pisdia2d(jl)%lname 
    93             ctrc2u(jn) = pisdia2d(jl)%units 
    94          END DO 
     66      REWIND( numnatp_cfg )              ! Namelist nampisbio in configuration namelist : Pisces variables 
     67      READ  ( numnatp_cfg, nampismod, IOSTAT = ios, ERR = 902 ) 
     68902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampismod in configuration namelist', lwp ) 
     69      IF(lwm) WRITE ( numonp, nampismod ) 
    9570 
    96          DO jl = 1, jp_pisces_3d 
    97             jn = jp_pcs0_3d + jl - 1 
    98             ctrc3d(jn) = pisdia3d(jl)%sname 
    99             ctrc3l(jn) = pisdia3d(jl)%lname 
    100             ctrc3u(jn) = pisdia3d(jl)%units 
    101          END DO 
    102  
    103          IF(lwp) THEN                   ! control print 
    104             WRITE(numout,*) 
    105             WRITE(numout,*) ' Namelist : natadd' 
    106             DO jl = 1, jp_pisces_3d 
    107                jn = jp_pcs0_3d + jl - 1 
    108                WRITE(numout,*) '  3d diag nb : ', jn, '    short name : ', ctrc3d(jn), & 
    109                  &             '  long name  : ', ctrc3l(jn), '   unit : ', ctrc3u(jn) 
    110             END DO 
    111             WRITE(numout,*) ' ' 
    112  
    113             DO jl = 1, jp_pisces_2d 
    114                jn = jp_pcs0_2d + jl - 1 
    115                WRITE(numout,*) '  2d diag nb : ', jn, '    short name : ', ctrc2d(jn), & 
    116                  &             '  long name  : ', ctrc2l(jn), '   unit : ', ctrc2u(jn) 
    117             END DO 
    118             WRITE(numout,*) ' ' 
    119          ENDIF 
    120          ! 
     71     IF(lwp) THEN                  ! control print 
     72         WRITE(numout,*) ' ' 
     73         WRITE(numout,*) ' Flag to use LOBSTER model            ln_p2z    = ', ln_p2z 
     74         WRITE(numout,*) ' Flag to use PISCES standard  model   ln_p4z    = ', ln_p4z 
     75         WRITE(numout,*) ' Flag to use PISCES quota     model   ln_p5z    = ', ln_p5z 
     76         WRITE(numout,*) ' Flag to ligand                       ln_ligand = ', ln_ligand 
     77         WRITE(numout,*) ' ' 
    12178      ENDIF 
    12279 
    123 #if defined key_pisces_reduced 
    124  
    125       IF( ( .NOT.lk_iomput .AND. ln_diabio ) .OR. lk_trdmxl_trc ) THEN 
    126          ! 
    127          ! Namelist nampisdbi 
    128          ! ------------------- 
    129          REWIND( numnatp_ref )              ! Namelist nampisdbi in reference namelist : Pisces add. diagnostics 
    130          READ  ( numnatp_ref, nampisdbi, IOSTAT = ios, ERR = 903) 
    131 903      IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisdbi in reference namelist', lwp ) 
    132  
    133          REWIND( numnatp_cfg )              ! Namelist nampisdbi in configuration namelist : Pisces add. diagnostics 
    134          READ  ( numnatp_cfg, nampisdbi, IOSTAT = ios, ERR = 904 ) 
    135 904      IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampisdbi in configuration namelist', lwp ) 
    136          IF(lwm) WRITE ( numonp, nampisdbi ) 
    137  
    138          DO jl = 1, jp_pisces_trd 
    139             jn = jp_pcs0_trd + jl - 1 
    140             ctrbio(jl) = pisdiabio(jl)%sname 
    141             ctrbil(jl) = pisdiabio(jl)%lname 
    142             ctrbiu(jl) = pisdiabio(jl)%units 
    143          END DO 
    144  
    145          IF(lwp) THEN                   ! control print 
    146             WRITE(numout,*) 
    147             WRITE(numout,*) ' Namelist : nampisdbi' 
    148             DO jl = 1, jp_pisces_trd 
    149                jn = jp_pcs0_trd + jl - 1 
    150                WRITE(numout,*) '  biological trend No : ', jn, '    short name : ', ctrbio(jn), & 
    151                  &             '  long name  : ', ctrbio(jn), '   unit : ', ctrbio(jn) 
    152             END DO 
    153             WRITE(numout,*) ' ' 
    154          END IF 
    155          ! 
    156       END IF 
    157  
    158 #endif 
    159  
     80      IF(lwp) THEN                         ! control print 
     81         WRITE(numout,*) ' ' 
     82         IF( ln_p5z    )  WRITE(numout,*) '  PISCES QUOTA model is used' 
     83         IF( ln_p4z    )  WRITE(numout,*) '  PISCES STANDARD model is used' 
     84         IF( ln_p2z    )  WRITE(numout,*) '  LOBSTER model is used' 
     85         IF( ln_ligand )  WRITE(numout,*) '  Compute remineralization/dissolution of organic ligands' 
     86         WRITE(numout,*) ' ' 
     87      ENDIF 
     88     
     89      ioptio = 0 
     90      IF( ln_p2z )    ioptio = ioptio + 1 
     91      IF( ln_p4z )    ioptio = ioptio + 1 
     92      IF( ln_p5z )    ioptio = ioptio + 1 
     93      ! 
     94      IF( ioptio /= 1 )   CALL ctl_stop( 'Choose ONE PISCES model namelist nampismod' ) 
     95       ! 
    16096   END SUBROUTINE trc_nam_pisces 
    161  
    162 #else 
    163    !!---------------------------------------------------------------------- 
    164    !!  Dummy module :                                   No PISCES bio-model 
    165    !!---------------------------------------------------------------------- 
    166 CONTAINS 
    167    SUBROUTINE trc_nam_pisces                      ! Empty routine 
    168    END  SUBROUTINE  trc_nam_pisces 
    169 #endif   
    17097 
    17198   !!====================================================================== 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/trcsms_pisces.F90

    r4147 r7403  
    77   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90 
    88   !!---------------------------------------------------------------------- 
    9 #if defined key_pisces || defined key_pisces_reduced 
    10    !!---------------------------------------------------------------------- 
    11    !!   'key_pisces'                                       PISCES bio-model 
    12    !!---------------------------------------------------------------------- 
    139   !!   trcsms_pisces        :  Time loop of passive tracers sms 
    1410   !!---------------------------------------------------------------------- 
    1511   USE par_pisces 
     12   USE sms_pisces 
    1613   USE p4zsms 
    1714   USE p2zsms 
     
    4845      !!--------------------------------------------------------------------- 
    4946      ! 
    50       IF( lk_p4z ) THEN  ;   CALL p4z_sms( kt )   !  PISCES 
    51       ELSE               ;   CALL p2z_sms( kt )   !  LOBSTER 
     47      IF( ln_p4z .OR. ln_p5z ) THEN  ;   CALL p4z_sms( kt )   !  PISCES 
     48      ELSE                           ;   CALL p2z_sms( kt )   !  LOBSTER 
    5249      ENDIF 
    5350 
     
    5552   END SUBROUTINE trc_sms_pisces 
    5653 
    57 #else 
    58    !!====================================================================== 
    59    !!  Dummy module :                                   No PISCES bio-model 
    60    !!====================================================================== 
    61 CONTAINS 
    62    SUBROUTINE trc_sms_pisces( kt )                   ! Empty routine 
    63       INTEGER, INTENT( in ) ::   kt 
    64       WRITE(*,*) 'trc_sms_pisces: You should not have seen this print! error?', kt 
    65    END SUBROUTINE trc_sms_pisces 
    66 #endif  
    67  
    6854   !!====================================================================== 
    6955END MODULE trcsms_pisces  
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/PISCES/trcwri_pisces.F90

    r6140 r7403  
    66   !! History :   1.0  !  2009-05 (C. Ethe)  Original code 
    77   !!---------------------------------------------------------------------- 
    8 #if defined key_top && defined key_iomput && ( defined key_pisces || defined key_pisces_reduced ) 
    9    !!---------------------------------------------------------------------- 
    10    !!   'key_pisces or key_pisces_reduced'                     PISCES model 
     8#if defined key_top && defined key_iomput  
    119   !!---------------------------------------------------------------------- 
    1210   !! trc_wri_pisces   :  outputs of concentration fields 
     
    4240      ! write the tracer concentrations in the file 
    4341      ! --------------------------------------- 
    44 #if defined key_pisces_reduced 
    45       DO jn = jp_pcs0, jp_pcs1 
    46          cltra = TRIM( ctrcnm(jn) )                  ! short title for tracer 
    47          CALL iom_put( cltra, trn(:,:,:,jn) ) 
    48       END DO 
    49 #else 
    50       DO jn = jp_pcs0, jp_pcs1 
    51          zfact = 1.0e+6  
    52          IF( jn == jpno3 .OR. jn == jpnh4 ) zfact = rno3 * 1.0e+6  
    53          IF( jn == jppo4  )                 zfact = po4r * 1.0e+6 
    54          cltra = TRIM( ctrcnm(jn) )                  ! short title for tracer 
    55          IF( iom_use( cltra ) )  CALL iom_put( cltra, trn(:,:,:,jn) * zfact ) 
    56       END DO 
     42      IF( ln_p2z ) THEN 
     43         DO jn = jp_pcs0, jp_pcs1 
     44            cltra = TRIM( ctrcnm(jn) )                  ! short title for tracer 
     45            CALL iom_put( cltra, trn(:,:,:,jn) ) 
     46         END DO 
     47      ELSE 
     48         DO jn = jp_pcs0, jp_pcs1 
     49            zfact = 1.0e+6  
     50            IF( jn == jpno3 .OR. jn == jpnh4 ) zfact = rno3 * 1.0e+6  
     51            IF( jn == jppo4  )                 zfact = po4r * 1.0e+6 
     52            cltra = TRIM( ctrcnm(jn) )                  ! short title for tracer 
     53            IF( iom_use( cltra ) )  CALL iom_put( cltra, trn(:,:,:,jn) * zfact ) 
     54         END DO 
    5755 
    58       IF( iom_use( "INTDIC" ) ) THEN                     !   DIC content in kg/m2 
    59          zdic(:,:) = 0. 
    60          DO jk = 1, jpkm1 
    61             zdic(:,:) = zdic(:,:) + trn(:,:,jk,jpdic) * e3t_n(:,:,jk) * tmask(:,:,jk) * 12. 
    62          ENDDO 
    63          CALL iom_put( 'INTDIC', zdic )      
    64       ENDIF 
    65       ! 
    66       IF( iom_use( "O2MIN" ) .OR. iom_use ( "ZO2MIN" ) ) THEN  ! Oxygen minimum concentration and depth  
    67          zo2min   (:,:) = trn(:,:,1,jpoxy) * tmask(:,:,1) 
    68          zdepo2min(:,:) = gdepw_n(:,:,1)   * tmask(:,:,1) 
    69          DO jk = 2, jpkm1 
    70             DO jj = 1, jpj 
    71                DO ji = 1, jpi 
    72                   IF( tmask(ji,jj,jk) == 1 ) then 
    73                      IF( trn(ji,jj,jk,jpoxy) < zo2min(ji,jj) ) then 
    74                         zo2min   (ji,jj) = trn(ji,jj,jk,jpoxy) 
    75                         zdepo2min(ji,jj) = gdepw_n(ji,jj,jk) 
     56         IF( iom_use( "INTDIC" ) ) THEN                     !   DIC content in kg/m2 
     57            zdic(:,:) = 0. 
     58            DO jk = 1, jpkm1 
     59               zdic(:,:) = zdic(:,:) + trn(:,:,jk,jpdic) * e3t_n(:,:,jk) * tmask(:,:,jk) * 12. 
     60            ENDDO 
     61            CALL iom_put( 'INTDIC', zdic )      
     62         ENDIF 
     63         ! 
     64         IF( iom_use( "O2MIN" ) .OR. iom_use ( "ZO2MIN" ) ) THEN  ! Oxygen minimum concentration and depth  
     65            zo2min   (:,:) = trn(:,:,1,jpoxy) * tmask(:,:,1) 
     66            zdepo2min(:,:) = gdepw_n(:,:,1)   * tmask(:,:,1) 
     67            DO jk = 2, jpkm1 
     68               DO jj = 1, jpj 
     69                  DO ji = 1, jpi 
     70                     IF( tmask(ji,jj,jk) == 1 ) then 
     71                        IF( trn(ji,jj,jk,jpoxy) < zo2min(ji,jj) ) then 
     72                           zo2min   (ji,jj) = trn(ji,jj,jk,jpoxy) 
     73                           zdepo2min(ji,jj) = gdepw_n(ji,jj,jk) 
     74                        ENDIF 
    7675                     ENDIF 
    77                   ENDIF 
     76                  END DO 
    7877               END DO 
    7978            END DO 
    80          END DO 
    81          ! 
    82          CALL iom_put('O2MIN' , zo2min     )                              ! oxygen minimum concentration 
    83          CALL iom_put('ZO2MIN', zdepo2min  )                              ! depth of oxygen minimum concentration 
    84           ! 
    85       ENDIF 
    86 #endif 
     79            ! 
     80            CALL iom_put('O2MIN' , zo2min     )                              ! oxygen minimum concentration 
     81            CALL iom_put('ZO2MIN', zdepo2min  )                              ! depth of oxygen minimum concentration 
     82             ! 
     83         ENDIF 
     84     ENDIF 
    8785      ! 
    8886   END SUBROUTINE trc_wri_pisces 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/TRP/trcadv.F90

    r6140 r7403  
    5757   INTEGER ::              nadv             ! chosen advection scheme 
    5858   ! 
    59    REAL(wp) ::   r2dttrc  ! vertical profile time-step, = 2 rdt 
    60    !                                                    ! except at nitrrc000 (=rdt) if neuler=0 
    61  
    6259   !! * Substitutions 
    6360#  include "vectopt_loop_substitute.h90" 
     
    8784      ! 
    8885      CALL wrk_alloc( jpi,jpj,jpk,   zun, zvn, zwn ) 
    89       ! 
    90       IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN     ! at nittrc000 
    91          r2dttrc =  rdttrc           ! = rdttrc (use or restarting with Euler time stepping) 
    92       ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN          ! at nittrc000 or nittrc000+1 
    93          r2dttrc = 2. * rdttrc       ! = 2 rdttrc (leapfrog) 
    94       ENDIF 
    9586      !                                               !==  effective transport  ==! 
    9687      DO jk = 1, jpkm1 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/TRP/trcnxt.F90

    r6140 r7403  
    4343 
    4444   PUBLIC   trc_nxt          ! routine called by step.F90 
    45  
    46    REAL(wp) ::   r2dttrc 
    4745 
    4846   !!---------------------------------------------------------------------- 
     
    10098 
    10199      IF( lk_bdy )  CALL trc_bdy( kt ) 
    102  
    103       !                                ! set time step size (Euler/Leapfrog) 
    104       IF( neuler == 0 .AND. kt ==  nittrc000 ) THEN  ;  r2dttrc =     rdttrc   ! at nittrc000             (Euler) 
    105       ELSEIF( kt <= nittrc000 + nn_dttrc )     THEN  ;  r2dttrc = 2.* rdttrc   ! at nit000 or nit000+1 (Leapfrog) 
    106       ENDIF 
    107100 
    108101      IF( l_trdtrc )  THEN             ! trends: store now fields before the Asselin filter application 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/TRP/trcrad.F90

    r5836 r7403  
    6262      ENDIF 
    6363 
    64       IF( lk_cfc     )   CALL trc_rad_sms( kt, trb, trn, jp_cfc0 , jp_cfc1               )  ! CFC model 
    65       IF( lk_c14b    )   CALL trc_rad_sms( kt, trb, trn, jp_c14b0, jp_c14b1              )  ! bomb C14 
    66       IF( lk_pisces  )   CALL trc_rad_sms( kt, trb, trn, jp_pcs0 , jp_pcs1, cpreserv='Y' )  ! PISCES model 
    67       IF( lk_my_trc  )   CALL trc_rad_sms( kt, trb, trn, jp_myt0 , jp_myt1               )  ! MY_TRC model 
     64      IF( ln_age     )   CALL trc_rad_sms( kt, trb, trn, jp_age , jp_age               )  !  AGE 
     65      IF( ll_cfc     )   CALL trc_rad_sms( kt, trb, trn, jp_cfc0, jp_cfc1               )  !  CFC model 
     66      IF( ln_c14     )   CALL trc_rad_sms( kt, trb, trn, jp_c14 , jp_c14               )  !  C14 
     67      IF( ln_pisces  )   CALL trc_rad_sms( kt, trb, trn, jp_pcs0, jp_pcs1, cpreserv='Y' )  !  PISCES model 
     68      IF( ln_my_trc  )   CALL trc_rad_sms( kt, trb, trn, jp_myt0, jp_myt1               )  !  MY_TRC model 
    6869 
    6970      ! 
     
    213214            IF( l_trdtrc ) THEN 
    214215               ! 
    215                zs2rdt = 1. / ( 2. * rdt * FLOAT( nn_dttrc ) ) 
     216               zs2rdt = 1. / ( 2. * rdt * REAL( nn_dttrc, wp ) ) 
    216217               ztrtrdb(:,:,:) = ( ptrb(:,:,:,jn) - ztrtrdb(:,:,:) ) * zs2rdt 
    217218               ztrtrdn(:,:,:) = ( ptrn(:,:,:,jn) - ztrtrdn(:,:,:) ) * zs2rdt  
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/TRP/trcsbc.F90

    r6942 r7403  
    8484      END SELECT 
    8585 
    86       IF( ln_top_euler) THEN 
    87          r2dt =  rdttrc              ! = rdttrc (use Euler time stepping) 
    88       ELSE 
    89          IF( neuler == 0 .AND. kt == nittrc000 ) THEN     ! at nittrc000 
    90             r2dt = rdttrc            ! = rdttrc (restarting with Euler time stepping) 
    91          ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN          ! at nittrc000 or nittrc000+1 
    92             r2dt = 2. * rdttrc       ! = 2 rdttrc (leapfrog) 
    93          ENDIF 
    94       ENDIF 
    95  
    96  
    9786      IF( kt == nittrc000 ) THEN 
    9887         IF(lwp) WRITE(numout,*) 
     
    160149                  zdtra = r1_rau0 * ( ztfx + zsfx(ji,jj) * trn(ji,jj,1,jn) )  
    161150                  IF ( zdtra < 0. ) THEN 
    162                      zratio = -zdtra * zse3t * r2dt / ( trn(ji,jj,1,jn) + zrtrn ) 
     151                     zratio = -zdtra * zse3t * r2dttrc / ( trn(ji,jj,1,jn) + zrtrn ) 
    163152                     zdtra = MIN(1.0, zratio) * zdtra ! avoid negative concentrations to arise 
    164153                  ENDIF 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/TRP/trczdf.F90

    r6140 r7403  
    3535   INTEGER ::   nzdf = 0               ! type vertical diffusion algorithm used 
    3636      !                                ! defined from ln_zdf...  namlist logicals) 
    37    REAL(wp) ::  r2dttrc   ! vertical profile time-step, = 2 rdt 
    38       !                   ! except at nittrc000 (=rdt) if neuler=0 
    39  
    4037   !! * Substitutions 
    4138#  include "zdfddm_substitute.h90" 
     
    6360      IF( nn_timing == 1 )  CALL timing_start('trc_zdf') 
    6461      ! 
    65       IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN     ! at nittrc000 
    66          r2dttrc =  rdttrc           ! = rdttrc (use or restarting with Euler time stepping) 
    67       ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN          ! at nittrc000 or nittrc000+1 
    68          r2dttrc = 2. * rdttrc       ! = 2 rdttrc (leapfrog) 
    69       ENDIF 
    70  
    7162      IF( l_trdtrc )  THEN 
    7263         CALL wrk_alloc( jpi, jpj, jpk, jptra, ztrtrd ) 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/TRP/trdmxl_trc.F90

    r6140 r7403  
    4141   PUBLIC trd_mxl_trc 
    4242   PUBLIC trd_mxl_trc_alloc 
    43    PUBLIC trd_mxl_bio 
    4443   PUBLIC trd_mxl_trc_init 
    4544   PUBLIC trd_mxl_trc_zint 
    46    PUBLIC trd_mxl_bio_zint 
    4745 
    4846   CHARACTER (LEN=40) ::  clhstnam                                ! name of the trends NetCDF file 
    4947   INTEGER ::   nmoymltrd 
    50    INTEGER, ALLOCATABLE, SAVE, DIMENSION(:) ::   ndextrd1 
    51    INTEGER, DIMENSION(jptra) ::   nidtrd, nh_t 
     48   INTEGER, ALLOCATABLE, SAVE, DIMENSION(:) ::   ndextrd1, nidtrd, nh_t 
    5249   INTEGER ::   ndimtrd1                         
    5350   INTEGER, SAVE ::  ionce, icount 
    54 #if defined key_pisces_reduced 
    55    INTEGER ::   nidtrdbio, nh_tb 
    56    INTEGER, SAVE ::  ioncebio, icountbio 
    57    INTEGER, SAVE ::   nmoymltrdbio 
    58 #endif 
    5951   LOGICAL :: llwarn  = .TRUE.                                    ! this should always be .TRUE. 
    6052   LOGICAL :: lldebug = .TRUE. 
    6153 
    6254   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::  ztmltrd2   ! 
    63 #if defined key_pisces_reduced 
    64    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  ztmltrdbio2  ! only needed for mean diagnostics in trd_mxl_bio() 
    65 #endif 
    6655 
    6756   !! * Substitutions 
     
    7968      !!---------------------------------------------------------------------- 
    8069      ALLOCATE( ztmltrd2(jpi,jpj,jpltrd_trc,jptra) ,      & 
    81 #if defined key_pisces_reduced 
    82          &      ztmltrdbio2(jpi,jpj,jpdiabio)      ,      & 
    83 #endif 
    84          &      ndextrd1(jpi*jpj)                  ,  STAT=trd_mxl_trc_alloc) 
     70         &      ndextrd1(jpi*jpj), nidtrd(jptra), nh_t(jptra),  STAT=trd_mxl_trc_alloc) 
    8571         ! 
    8672      IF( lk_mpp                )   CALL mpp_sum ( trd_mxl_trc_alloc ) 
     
    131117         SELECT CASE ( nn_ctls_trc )                                ! choice of the control surface 
    132118            CASE ( -2  )   ;   STOP 'trdmxl_trc : not ready '     !     -> isopycnal surface (see ???) 
    133 #if defined key_pisces || defined key_pisces_reduced 
    134119            CASE ( -1  )   ;   nmld_trc(:,:) = neln(:,:)          !     -> euphotic layer with light criterion 
    135 #endif 
    136120            CASE (  0  )   ;   nmld_trc(:,:) = nmln(:,:)          !     -> ML with density criterion (see zdfmxl) 
    137121            CASE (  1  )   ;   nmld_trc(:,:) = nbol_trc(:,:)          !     -> read index from file 
     
    207191      ! 
    208192   END SUBROUTINE trd_mxl_trc_zint 
    209  
    210  
    211    SUBROUTINE trd_mxl_bio_zint( ptrc_trdmxl, ktrd ) 
    212       !!---------------------------------------------------------------------- 
    213       !!                  ***  ROUTINE trd_mxl_bio_zint  *** 
    214       !! 
    215       !! ** Purpose :   Compute the vertical average of the 3D fields given as arguments 
    216       !!                to the subroutine. This vertical average is performed from ocean 
    217       !!                surface down to a chosen control surface. 
    218       !! 
    219       !! ** Method/usage : 
    220       !!      The control surface can be either a mixed layer depth (time varying) 
    221       !!      or a fixed surface (jk level or bowl). 
    222       !!      Choose control surface with nctls in namelist NAMTRD : 
    223       !!        nctls_trc = 0  : use mixed layer with density criterion 
    224       !!        nctls_trc = 1  : read index from file 'ctlsurf_idx' 
    225       !!        nctls_trc > 1  : use fixed level surface jk = nctls_trc 
    226       !!      Note: in the remainder of the routine, the volume between the 
    227       !!            surface and the control surface is called "mixed-layer" 
    228       !!---------------------------------------------------------------------- 
    229       !! 
    230       INTEGER                         , INTENT(in) ::   ktrd          ! bio trend index 
    231       REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) ::   ptrc_trdmxl   ! passive trc trend 
    232 #if defined key_pisces_reduced 
    233       ! 
    234       INTEGER ::   ji, jj, jk, isum 
    235       REAL(wp), POINTER, DIMENSION(:,:) :: zvlmsk 
    236       !!---------------------------------------------------------------------- 
    237  
    238       CALL wrk_alloc( jpi, jpj, zvlmsk ) 
    239  
    240       ! I. Definition of control surface and integration weights 
    241       ! -------------------------------------------------------- 
    242       !            ==> only once per time step <== 
    243  
    244       IF( icountbio == 1 ) THEN 
    245          ! 
    246          tmltrd_bio(:,:,:) = 0.e0    ! <<< reset trend arrays to zero 
    247          ! ... Set nmld(ji,jj) = index of first T point below control surf. or outside mixed-layer 
    248          SELECT CASE ( nn_ctls_trc )                                    ! choice of the control surface 
    249             CASE ( -2  )   ;   STOP 'trdmxl_trc : not ready '     !     -> isopycnal surface (see ???) 
    250             CASE ( -1  )   ;   nmld_trc(:,:) = neln(:,:)          !     -> euphotic layer with light criterion 
    251             CASE (  0  )   ;   nmld_trc(:,:) = nmln(:,:)          !     -> ML with density criterion (see zdfmxl) 
    252             CASE (  1  )   ;   nmld_trc(:,:) = nbol_trc(:,:)          !     -> read index from file 
    253             CASE (  2: )   ;   nn_ctls_trc = MIN( nn_ctls_trc, jpktrd_trc - 1 ) 
    254                                nmld_trc(:,:) = nn_ctls_trc + 1          !     -> model level 
    255          END SELECT 
    256  
    257          ! ... Compute ndextrd1 and ndimtrd1 only once 
    258          IF( ioncebio == 1 ) THEN 
    259             ! 
    260             ! Check of validity : nmld_trc(ji,jj) <= jpktrd_trc 
    261             isum        = 0 
    262             zvlmsk(:,:) = 0.e0 
    263  
    264             IF( jpktrd_trc < jpk ) THEN 
    265                DO jj = 1, jpj 
    266                   DO ji = 1, jpi 
    267                      IF( nmld_trc(ji,jj) <= jpktrd_trc ) THEN 
    268                         zvlmsk(ji,jj) = tmask(ji,jj,1) 
    269                      ELSE 
    270                         isum = isum + 1 
    271                         zvlmsk(ji,jj) = 0. 
    272                      END IF 
    273                   END DO 
    274                END DO 
    275             END IF 
    276  
    277             ! Index of ocean points (2D only) 
    278             IF( isum > 0 ) THEN 
    279                WRITE(numout,*)' tmltrd_trc : Number of invalid points nmld_trc > jpktrd', isum 
    280                CALL wheneq( jpi*jpj, zvlmsk(:,:) , 1, 1., ndextrd1, ndimtrd1 ) 
    281             ELSE 
    282                CALL wheneq( jpi*jpj, tmask(:,:,1), 1, 1., ndextrd1, ndimtrd1 ) 
    283             END IF 
    284  
    285             ioncebio = 0                  ! no more pass here 
    286             ! 
    287          END IF !  ( ioncebio == 1 ) 
    288  
    289          ! ... Weights for vertical averaging 
    290          wkx_trc(:,:,:) = 0.e0 
    291          DO jk = 1, jpktrd_trc         ! initialize wkx_trc with vertical scale factor in mixed-layer 
    292             DO jj = 1,jpj 
    293               DO ji = 1,jpi 
    294                   IF( jk - nmld_trc(ji,jj) < 0. )   wkx_trc(ji,jj,jk) = e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 
    295                END DO 
    296             END DO 
    297          END DO 
    298  
    299          rmld_trc(:,:) = 0. 
    300          DO jk = 1, jpktrd_trc         ! compute mixed-layer depth : rmld_trc 
    301             rmld_trc(:,:) = rmld_trc(:,:) + wkx_trc(:,:,jk) 
    302          END DO 
    303  
    304          DO jk = 1, jpktrd_trc         ! compute integration weights 
    305             wkx_trc(:,:,jk) = wkx_trc(:,:,jk) / MAX( 1., rmld_trc(:,:) ) 
    306          END DO 
    307  
    308          icountbio = 0                    ! <<< flag = off : control surface & integr. weights 
    309          !                             !     computed only once per time step 
    310       END IF ! ( icountbio == 1 ) 
    311  
    312       ! II. Vertical integration of trends in the mixed-layer 
    313       ! ----------------------------------------------------- 
    314  
    315  
    316       DO jk = 1, jpktrd_trc 
    317          tmltrd_bio(:,:,ktrd) = tmltrd_bio(:,:,ktrd) + ptrc_trdmxl(:,:,jk) * wkx_trc(:,:,jk) 
    318       END DO 
    319  
    320       CALL wrk_dealloc( jpi, jpj, zvlmsk ) 
    321 #endif 
    322       ! 
    323    END SUBROUTINE trd_mxl_bio_zint 
    324193 
    325194 
     
    877746 
    878747 
    879    SUBROUTINE trd_mxl_bio( kt ) 
    880       !!---------------------------------------------------------------------- 
    881       !!                  ***  ROUTINE trd_mld  *** 
    882       !! 
    883       !! ** Purpose :  Compute and cumulate the mixed layer biological trends over an analysis 
    884       !!               period, and write NetCDF outputs. 
    885       !! 
    886       !! ** Method/usage : 
    887       !!          The stored trends can be chosen twofold (according to the ln_trdmxl_trc_instant 
    888       !!          logical namelist variable) : 
    889       !!          1) to explain the difference between initial and final 
    890       !!             mixed-layer T & S (where initial and final relate to the 
    891       !!             current analysis window, defined by ntrd in the namelist) 
    892       !!          2) to explain the difference between the current and previous 
    893       !!             TIME-AVERAGED mixed-layer T & S (where time-averaging is 
    894       !!             performed over each analysis window). 
    895       !! 
    896       !! ** Consistency check : 
    897       !!        If the control surface is fixed ( nctls > 1 ), the residual term (dh/dt 
    898       !!        entrainment) should be zero, at machine accuracy. Note that in the case 
    899       !!        of time-averaged mixed-layer fields, this residual WILL NOT BE ZERO 
    900       !!        over the first two analysis windows (except if restart). 
    901       !!        N.B. For ORCA2_LIM, use e.g. ntrd=5, ucf=1., nctls=8 
    902       !!             for checking residuals. 
    903       !!             On a NEC-SX5 computer, this typically leads to: 
    904       !!                   O(1.e-20) temp. residuals (tml_res) when ln_trdmxl_trc_instant=.false. 
    905       !!                   O(1.e-21) temp. residuals (tml_res) when ln_trdmxl_trc_instant=.true. 
    906       !! 
    907       !! ** Action : 
    908       !!       At each time step, mixed-layer averaged trends are stored in the 
    909       !!       tmltrd(:,:,jpmxl_xxx) array (see trdmxl_oce.F90 for definitions of jpmxl_xxx). 
    910       !!       This array is known when trd_mld is called, at the end of the stp subroutine, 
    911       !!       except for the purely vertical K_z diffusion term, which is embedded in the 
    912       !!       lateral diffusion trend. 
    913       !! 
    914       !!       In I), this K_z term is diagnosed and stored, thus its contribution is removed 
    915       !!       from the lateral diffusion trend. 
    916       !!       In II), the instantaneous mixed-layer T & S are computed, and misc. cumulative 
    917       !!       arrays are updated. 
    918       !!       In III), called only once per analysis window, we compute the total trends, 
    919       !!       along with the residuals and the Asselin correction terms. 
    920       !!       In IV), the appropriate trends are written in the trends NetCDF file. 
    921       !! 
    922       !! References : 
    923       !!       - Vialard & al. 
    924       !!       - See NEMO documentation (in preparation) 
    925       !!---------------------------------------------------------------------- 
    926       INTEGER, INTENT( in ) ::   kt                       ! ocean time-step index 
    927 #if defined key_pisces_reduced 
    928       INTEGER  ::  jl, it, itmod 
    929       LOGICAL  :: llwarn  = .TRUE., lldebug = .TRUE. 
    930       REAL(wp) :: zfn, zfn2 
    931       !!---------------------------------------------------------------------- 
    932       ! ... Warnings 
    933       IF( nn_dttrc  /= 1  ) CALL ctl_stop( " Be careful, trends diags never validated " ) 
    934  
    935       ! ====================================================================== 
    936       ! II. Cumulate the trends over the analysis window 
    937       ! ====================================================================== 
    938  
    939       ztmltrdbio2(:,:,:) = 0.e0  ! <<< reset arrays to zero 
    940  
    941       ! II.3 Initialize mixed-layer "before" arrays for the 1rst analysis window 
    942       ! ------------------------------------------------------------------------ 
    943       IF( kt == nittrc000 + nn_dttrc ) THEN  !  i.e. ( .NOT. ln_rstart ).AND.( kt == nit000 + 1) 
    944          ! 
    945          tmltrd_csum_ub_bio (:,:,:) = 0.e0 
    946          ! 
    947       END IF 
    948  
    949       ! II.4 Cumulated trends over the analysis period 
    950       ! ---------------------------------------------- 
    951       ! 
    952       !         [  1rst analysis window ] [     2nd analysis window     ] 
    953       ! 
    954       ! 
    955       !     o---[--o-----o-----o-----o--]-[--o-----o-----o-----o-----o--]---o-----o--> time steps 
    956       !                            ntrd                             2*ntrd       etc. 
    957       !     1      2     3     4    =5 e.g.                          =10 
    958       ! 
    959       IF( ( kt >= 2 ).OR.( ln_rsttr ) ) THEN 
    960          ! 
    961          nmoymltrdbio = nmoymltrdbio + 1 
    962  
    963          ! ... Trends associated with the time mean of the ML passive tracers 
    964          tmltrd_sum_bio    (:,:,:) = tmltrd_sum_bio    (:,:,:) + tmltrd_bio    (:,:,:) 
    965          tmltrd_csum_ln_bio(:,:,:) = tmltrd_csum_ln_bio(:,:,:) + tmltrd_sum_bio(:,:,:) 
    966          ! 
    967       END IF 
    968  
    969       ! ====================================================================== 
    970       ! III. Prepare fields for output (get here ONCE PER ANALYSIS PERIOD) 
    971       ! ====================================================================== 
    972  
    973       ! Convert to appropriate physical units 
    974       tmltrd_bio(:,:,:) = tmltrd_bio(:,:,:) * rn_ucf_trc 
    975  
    976       MODULO_NTRD : IF( MOD( kt, nn_trd_trc ) == 0 ) THEN      ! nitend MUST be multiple of ntrd 
    977          ! 
    978          zfn  = float(nmoymltrdbio)    ;    zfn2 = zfn * zfn 
    979  
    980          ! III.1 Prepare fields for output ("instantaneous" diagnostics) 
    981          ! ------------------------------------------------------------- 
    982  
    983 #if defined key_diainstant 
    984          STOP 'tmltrd_bio : key_diainstant was never checked within trdmxl. Comment this to proceed.' 
    985 #endif 
    986          ! III.2 Prepare fields for output ("mean" diagnostics) 
    987          ! ---------------------------------------------------- 
    988  
    989          ztmltrdbio2(:,:,:) = tmltrd_csum_ub_bio(:,:,:) + tmltrd_csum_ln_bio(:,:,:) 
    990  
    991          !-- Lateral boundary conditions 
    992          IF ( cp_cfg .NE. 'gyre' ) THEN            ! other than GYRE configuration  
    993             ! ES_B27_CD_WARN : lbc inutile GYRE, cf. + haut 
    994             DO jn = 1, jpdiabio 
    995               CALL lbc_lnk( ztmltrdbio2(:,:,jn), 'T', 1. ) 
    996             ENDDO 
    997          ENDIF 
    998  
    999          IF( lldebug ) THEN 
    1000             ! 
    1001             WRITE(numout,*) 'trd_mxl_bio : write trends in the Mixed Layer for debugging process:' 
    1002             WRITE(numout,*) '~~~~~~~~~~~  ' 
    1003             WRITE(numout,*) 'TRC kt = ', kt, 'nmoymltrdbio = ', nmoymltrdbio 
    1004             WRITE(numout,*) 
    1005  
    1006             DO jl = 1, jpdiabio 
    1007               IF( ln_trdmxl_trc_instant ) THEN 
    1008                   WRITE(numout,97) 'TRC jl =', jl, ' bio TREND INDEX  = ', jl, & 
    1009                      & ' SUM tmltrd_bio : ', SUM2D(tmltrd_bio(:,:,jl)) 
    1010               ELSE 
    1011                   WRITE(numout,97) 'TRC jl =', jl, ' bio TREND INDEX  = ', jl, & 
    1012                      & ' SUM ztmltrdbio2 : ', SUM2D(ztmltrdbio2(:,:,jl)) 
    1013               endif 
    1014             END DO 
    1015  
    1016 97          FORMAT(a10, i3, 2x, a30, i3, a20, 2x, g20.10) 
    1017 98          FORMAT(a10, i3, 2x, a30, 2x, g20.10) 
    1018 99          FORMAT('TRC jj =', i3,' : ', 10(g10.3,2x)) 
    1019             WRITE(numout,*) 
    1020             ! 
    1021          ENDIF 
    1022  
    1023          ! III.3 Time evolution array swap 
    1024          ! ------------------------------- 
    1025  
    1026          ! For passive tracer mean diagnostics 
    1027          tmltrd_csum_ub_bio (:,:,:) = zfn * tmltrd_sum_bio(:,:,:) - tmltrd_csum_ln_bio(:,:,:) 
    1028  
    1029          ! III.4 Convert to appropriate physical units 
    1030          ! ------------------------------------------- 
    1031          ztmltrdbio2    (:,:,:) = ztmltrdbio2    (:,:,:) * rn_ucf_trc/zfn2 
    1032  
    1033       END IF MODULO_NTRD 
    1034  
    1035       ! ====================================================================== 
    1036       ! IV. Write trends in the NetCDF file 
    1037       ! ====================================================================== 
    1038  
    1039       ! IV.1 Code for IOIPSL/NetCDF output 
    1040       ! ---------------------------------- 
    1041  
    1042       ! define time axis 
    1043       itmod = kt - nittrc000 + 1 
    1044       it    = kt 
    1045  
    1046       IF( lwp .AND. MOD( itmod , nn_trd_trc ) == 0 ) THEN 
    1047          WRITE(numout,*) ' ' 
    1048          WRITE(numout,*) 'trd_mxl_bio : write ML bio trends in the NetCDF file :' 
    1049          WRITE(numout,*) '~~~~~~~~~~~ ' 
    1050          WRITE(numout,*) '          ', TRIM(clhstnam), ' at kt = ', kt 
    1051          WRITE(numout,*) '          N.B. nmoymltrdbio = ', nmoymltrdbio 
    1052          WRITE(numout,*) ' ' 
    1053       END IF 
    1054  
    1055  
    1056       ! 2. Start writing data 
    1057       ! --------------------- 
    1058  
    1059       NETCDF_OUTPUT : IF( ln_trdmxl_trc_instant ) THEN    ! <<< write the trends for passive tracer instant. diags 
    1060          ! 
    1061             DO jl = 1, jpdiabio 
    1062                CALL histwrite( nidtrdbio,TRIM("ML_"//ctrd_bio(jl,2)) ,            & 
    1063                     &          it, tmltrd_bio(:,:,jl), ndimtrd1, ndextrd1 ) 
    1064             END DO 
    1065  
    1066  
    1067          IF( kt == nitend )   CALL histclo( nidtrdbio ) 
    1068  
    1069       ELSE    ! <<< write the trends for passive tracer mean diagnostics 
    1070  
    1071             DO jl = 1, jpdiabio 
    1072                CALL histwrite( nidtrdbio, TRIM("ML_"//ctrd_bio(jl,2)) ,            & 
    1073                     &          it, ztmltrdbio2(:,:,jl), ndimtrd1, ndextrd1 ) 
    1074             END DO 
    1075  
    1076             IF( kt == nitend )   CALL histclo( nidtrdbio ) 
    1077             ! 
    1078       END IF NETCDF_OUTPUT 
    1079  
    1080       ! Compute the control surface (for next time step) : flag = on 
    1081       icountbio = 1 
    1082  
    1083  
    1084  
    1085       IF( MOD( itmod, nn_trd_trc ) == 0 ) THEN 
    1086          ! 
    1087          ! III.5 Reset cumulative arrays to zero 
    1088          ! ------------------------------------- 
    1089          nmoymltrdbio = 0 
    1090          tmltrd_csum_ln_bio (:,:,:) = 0.e0 
    1091          tmltrd_sum_bio     (:,:,:) = 0.e0 
    1092       END IF 
    1093  
    1094       ! ====================================================================== 
    1095       ! Write restart file 
    1096       ! ====================================================================== 
    1097  
    1098 ! restart write is done in trd_mxl_trc_write which is called by trd_mxl_bio (Marina) 
    1099 ! 
    1100 #endif 
    1101    END SUBROUTINE trd_mxl_bio 
    1102  
    1103  
    1104748   REAL FUNCTION sum2d( ztab ) 
    1105749      !!---------------------------------------------------------------------- 
     
    1191835      tmltrd_csum_ln_trc (:,:,:,:) = 0.e0   ;   rmld_sum_trc       (:,:)     = 0.e0 
    1192836 
    1193 #if defined key_pisces_reduced 
    1194       nmoymltrdbio   = 0 
    1195       tmltrd_sum_bio     (:,:,:) = 0.e0     ;   tmltrd_csum_ln_bio (:,:,:) = 0.e0 
    1196       DO jl = 1, jp_pisces_trd 
    1197           ctrd_bio(jl,1) = ctrbil(jl)   ! long name 
    1198           ctrd_bio(jl,2) = ctrbio(jl)   ! short name 
    1199        ENDDO 
    1200 #endif 
    1201  
    1202837      IF( ln_rsttr .AND. ln_trdmxl_trc_restart ) THEN 
    1203838         CALL trd_mxl_trc_rst_read 
     
    1208843         tml_sumb_trc       (:,:,:)   = 0.e0   ;   tmltrd_csum_ub_trc (:,:,:,:) = 0.e0     ! mean 
    1209844         tmltrd_atf_sumb_trc(:,:,:)   = 0.e0   ;   tmltrd_rad_sumb_trc(:,:,:)   = 0.e0  
    1210 #if defined key_pisces_reduced 
    1211          tmltrd_csum_ub_bio (:,:,:) = 0.e0 
    1212 #endif 
    1213845 
    1214846       ENDIF 
     
    1216848      icount = 1   ;   ionce  = 1  ! open specifier    
    1217849 
    1218 #if defined key_pisces_reduced 
    1219       icountbio = 1   ;   ioncebio  = 1  ! open specifier 
    1220 #endif 
    1221850 
    1222851      ! I.3 Read control surface from file ctlsurf_idx 
     
    1308937      END DO 
    1309938 
    1310 #if defined key_pisces_reduced 
    1311           !-- Create a NetCDF file and enter the define mode 
    1312           CALL dia_nam( clhstnam, nn_trd_trc, 'trdbio' ) 
    1313           CALL histbeg( clhstnam, jpi, glamt, jpj, gphit,                                            & 
    1314              &             1, jpi, 1, jpj, iiter, zjulian, rdt, nh_tb, nidtrdbio, domain_id=nidom, snc4chunks=snc4set ) 
    1315 #endif 
    1316  
    1317939      !-- Define physical units 
    1318940      IF( rn_ucf_trc == 1. ) THEN 
     
    1354976      END DO 
    1355977 
    1356 #if defined key_pisces_reduced 
    1357       DO jl = 1, jp_pisces_trd 
    1358          CALL histdef(nidtrdbio, TRIM("ML_"//ctrd_bio(jl,2)), TRIM(clmxl//" ML_"//ctrd_bio(jl,1))   ,            & 
    1359              &    cltrcu, jpi, jpj, nh_tb, 1  , 1, 1  , -99 , 32, clop, zsto, zout ) ! IOIPSL: time mean 
    1360       END DO                                                                         ! if zsto=rdt above 
    1361 #endif 
    1362  
    1363978      !-- Leave IOIPSL/NetCDF define mode 
    1364979      DO jn = 1, jptra 
     
    1366981      END DO 
    1367982 
    1368 #if defined key_pisces_reduced 
    1369       !-- Leave IOIPSL/NetCDF define mode 
    1370       CALL histend( nidtrdbio, snc4set ) 
    1371  
    1372983      IF(lwp) WRITE(numout,*) 
    1373        IF(lwp) WRITE(numout,*) 'End of NetCDF Initialization for ML bio trends' 
    1374 #endif 
    1375984 
    1376985   END SUBROUTINE trd_mxl_trc_init 
     
    1385994      WRITE(*,*) 'trd_mxl_trc: You should not have seen this print! error?', kt 
    1386995   END SUBROUTINE trd_mxl_trc 
    1387    SUBROUTINE trd_mxl_bio( kt ) 
    1388       INTEGER, INTENT( in) ::   kt 
    1389       WRITE(*,*) 'trd_mxl_bio: You should not have seen this print! error?', kt 
    1390    END SUBROUTINE trd_mxl_bio 
    1391996   SUBROUTINE trd_mxl_trc_zint( ptrc_trdmxl, ktrd, ctype, kjn ) 
    1392997      INTEGER               , INTENT( in ) ::  ktrd, kjn              ! ocean trend index and passive tracer rank 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/TRP/trdmxl_trc_rst.F90

    r6140 r7403  
    107107            END DO                                                     ! tracer loop 
    108108            !                                                          ! =========== 
    109 #if defined key_pisces_reduced 
    110             DO jl = 1, jp_pisces_trd 
    111                CALL iom_rstput( kt, nitrst, nummldw_trc, 'tmltrd_csum_ub_bio'//ctrd_bio(jl,2), tmltrd_csum_ub_bio(:,:,jl) ) 
    112             ENDDO 
    113 #endif 
    114  
    115109         ENDIF 
    116110          
     
    188182         !                                                          ! =========== 
    189183 
    190 #if defined key_pisces_reduced 
    191          DO jl = 1, jp_pisces_trd 
    192             CALL iom_get( inum, jpdom_autoglo, 'tmltrd_csum_ub_bio'//ctrd_bio(jl,2), tmltrd_csum_ub_bio(:,:,jl) ) 
    193          ENDDO 
    194 #endif 
    195           
    196184         CALL iom_close( inum ) 
    197185      ENDIF 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/TRP/trdtrc_oce.F90

    r5836 r7403  
    2222   CHARACTER(len=50) ::  cn_trdrst_trc_in     !: suffix of pass. tracer restart name (input) 
    2323   CHARACTER(len=50) ::  cn_trdrst_trc_out    !: suffix of pass. tracer restart name (output) 
    24    LOGICAL, DIMENSION(jptra) ::   ln_trdtrc   !: large trends diagnostic to write or not (namelist) 
     24   LOGICAL, DIMENSION(:), ALLOCATABLE ::   ln_trdtrc   !: large trends diagnostic to write or not (namelist) 
    2525 
    2626# if defined key_trdtrc && defined key_iomput 
     
    106106# endif 
    107107 
    108 # if defined key_pisces_reduced 
    109    CHARACTER(LEN=80) :: clname_bio, ctrd_bio(jpdiabio,2) 
    110    REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::  & 
    111       tmltrd_bio,                         &      !: \ biological contributions to the total trend , 
    112                                                  !: / cumulated over the current analysis window 
    113       tmltrd_sum_bio,                     &      !: sum of these trends over the analysis period 
    114       tmltrd_csum_ln_bio,                 &      !: now cumulated sum of trends over the "lower triangle" 
    115       tmltrd_csum_ub_bio                         !: before (prev. analysis period) cumulated sum over the 
    116                                                  !: upper triangle 
    117 #endif 
    118108   !!---------------------------------------------------------------------- 
    119109   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
     
    154144#endif 
    155145      ! 
    156 # if defined key_pisces_reduced 
    157       ALLOCATE( tmltrd_bio        (jpi,jpj,jpdiabio) ,     & 
    158          &      tmltrd_sum_bio    (jpi,jpj,jpdiabio) ,     & 
    159          &      tmltrd_csum_ln_bio(jpi,jpj,jpdiabio) ,     & 
    160          &      tmltrd_csum_ub_bio(jpi,jpj,jpdiabio) , STAT=ierr(2) ) 
    161 # endif 
    162       ! 
    163146      trd_trc_oce_alloc = MAXVAL(ierr) 
    164147      ! 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/oce_trc.F90

    r5836 r7403  
    3131   USE phycst                                   !* physical constants * 
    3232   USE c1d                                      !* 1D configuration 
     33 
    3334   USE dom_oce                                  !* model domain * 
    3435 
     
    6364   USE sbc_oce , ONLY :   fmmflx     =>    fmmflx     !: freshwater budget: volume flux               [Kg/m2/s] 
    6465   USE sbc_oce , ONLY :   rnf        =>    rnf        !: river runoff   [Kg/m2/s] 
     66   USE sbc_oce , ONLY :   rnf_b      =>    rnf_b      !: river runoff at previus step   [Kg/m2/s] 
    6567   USE sbc_oce , ONLY :   ln_dm2dc   =>    ln_dm2dc   !: Diurnal Cycle  
     68   USE sbc_oce , ONLY :   ln_cpl     =>    ln_cpl     !: ocean-atmosphere coupled formulation 
    6669   USE sbc_oce , ONLY :   ncpl_qsr_freq   =>   ncpl_qsr_freq   !: qsr coupling frequency per days from atmospher 
    6770   USE sbc_oce , ONLY :   ln_rnf     =>    ln_rnf     !: runoffs / runoff mouths 
    6871   USE sbc_oce , ONLY :   fr_i       =>    fr_i       !: ice fraction (between 0 to 1) 
    6972   USE sbc_oce , ONLY :   nn_ice_embd => nn_ice_embd  !: flag for  levitating/embedding sea-ice in the ocean 
     73   USE sbc_oce , ONLY :   atm_co2    =>    atm_co2    !  atmospheric pCO2 
    7074   USE traqsr  , ONLY :   rn_abs     =>    rn_abs     !: fraction absorbed in the very near surface 
    7175   USE traqsr  , ONLY :   rn_si0     =>    rn_si0     !: very near surface depth of extinction 
     
    7579   USE sbcrnf  , ONLY :   h_rnf      =>    h_rnf      !: river runoff   [Kg/m2/s] 
    7680   USE sbcrnf  , ONLY :   nk_rnf     =>    nk_rnf     !: depth of runoff in model level 
     81   USE sbcrnf  , ONLY :   rn_rfact   =>    rn_rfact   !: multiplicative factor for runoff 
    7782 
    7883   USE trc_oce 
     
    114119   USE zdfmxl , ONLY :   hmlpt       =>   hmlpt       !: mixed layer depth at t-points (m) 
    115120 
    116    USE diaar5 , ONLY :   lk_diaar5  =>   lk_diaar5 
    117121#else 
    118122   !!---------------------------------------------------------------------- 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/par_trc.F90

    r4529 r7403  
    1010   !!---------------------------------------------------------------------- 
    1111   USE par_kind          ! kind parameters 
     12   USE par_pisces        ! PISCES model  parameters 
     13   USE par_cfc           ! CFCs  tracers parameters 
     14   USE par_c14           ! C14 tracer    parameters 
     15   USE par_age           ! AGE tracer    parameters 
     16   USE par_my_trc        ! MY_TRC model  parameters 
    1217   ! 
    13    USE par_pisces    ! PISCES  model 
    14    USE par_c14b      ! C14 bomb tracer 
    15    USE par_cfc       ! CFC 11 and 12 tracers 
    16    USE par_my_trc    ! user defined passive tracers 
    1718 
    1819   IMPLICIT NONE 
    1920 
    20    ! Passive tracers : Maximum number of tracers. Needed to define data structures 
    21    ! ---------------  
    22    INTEGER, PUBLIC,  PARAMETER ::   jpmaxtrc = 100 
     21   INTEGER, PUBLIC,  PARAMETER :: jpmaxtrc = 100  ! Maximum number of tracers 
    2322 
    24    ! Passive tracers : Total size 
    25    ! ---------------               ! total number of passive tracers, of 2d and 3d output and trend arrays 
    26    INTEGER, PUBLIC,  PARAMETER ::   jptra    =  jp_pisces     + jp_cfc     + jp_c14b    + jp_my_trc 
    27    INTEGER, PUBLIC,  PARAMETER ::   jpdia2d  =  jp_pisces_2d  + jp_cfc_2d  + jp_c14b_2d + jp_my_trc_2d 
    28    INTEGER, PUBLIC,  PARAMETER ::   jpdia3d  =  jp_pisces_3d  + jp_cfc_3d  + jp_c14b_3d + jp_my_trc_3d 
    29    !                     ! total number of sms diagnostic arrays 
    30    INTEGER, PUBLIC,  PARAMETER ::   jpdiabio =  jp_pisces_trd + jp_cfc_trd + jp_c14b_trd + jp_my_trc_trd 
    31     
    32    !  1D configuration ("key_c1d") 
    33    ! ----------------- 
    34 # if defined key_c1d 
    35    LOGICAL, PUBLIC, PARAMETER ::   lk_trc_c1d   = .TRUE.   !: 1D pass. tracer configuration flag 
    36 # else    
    37    LOGICAL, PUBLIC, PARAMETER ::   lk_trc_c1d   = .FALSE.  !: 1D pass. tracer configuration flag 
    38 # endif 
     23   INTEGER, PUBLIC             :: jptra           !: Total number of passive tracers 
     24   INTEGER, PUBLIC             :: jp_pisces       !: number of passive tracers in PISCES model 
     25   INTEGER, PUBLIC             :: jp_cfc          !: number of CFC passive tracers  
     26   INTEGER, PUBLIC             :: jp_my_trc       !: number of passive tracers in MY_TRC model 
     27   INTEGER, PUBLIC             :: jp_bgc          !: number of passive tracers for the BGC model 
    3928 
    40    REAL(wp), PUBLIC  :: rtrn  = 0.5 * EPSILON( 1.e0 )    !: truncation value 
     29   INTEGER, PUBLIC             :: jp_dia3d        !: number of 3D diagnostic variables 
     30   INTEGER, PUBLIC             :: jp_dia2d        !: number of 2D diagnostic variables 
    4131 
    42    !!---------------------------------------------------------------------- 
    43    !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
    44    !! $Id$  
    45    !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 
    46    !!====================================================================== 
     32   LOGICAL, PUBLIC             :: ln_pisces       !: PISCES flag  
     33   LOGICAL, PUBLIC             :: ln_age          !: AGE flag  
     34   LOGICAL, PUBLIC             :: ln_cfc11        !: CFC11 flag  
     35   LOGICAL, PUBLIC             :: ln_cfc12        !: CFC12 flag  
     36   LOGICAL, PUBLIC             :: ln_sf6          !: SF6 flag  
     37   LOGICAL, PUBLIC             :: ll_cfc          !: CFC flag  
     38   LOGICAL, PUBLIC             :: ln_c14          !: C14 flag  
     39   LOGICAL, PUBLIC             :: ln_my_trc       !: MY_TRC flag  
     40 
     41   REAL(wp), PUBLIC            :: rtrn  = 0.5 * EPSILON( 1.e0 )    !: truncation value 
     42 
    4743END MODULE par_trc 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/prtctl_trc.F90

    r4520 r7403  
    7070      INTEGER  ::   overlap, jn, js, sind, eind, kdir, j_id 
    7171      REAL(wp) ::   zsum, zvctl 
    72       CHARACTER (len=20), DIMENSION(jptra) ::   cl 
     72      CHARACTER (len=20), ALLOCATABLE, DIMENSION(:) ::   cl 
    7373      CHARACTER (len=10) ::   cl2 
    7474      REAL(wp), POINTER, DIMENSION(:,:,:)  :: zmask, ztab3d  
     
    7676 
    7777      CALL wrk_alloc( jpi, jpj, jpk, zmask, ztab3d ) 
     78      ALLOCATE( cl(jptra) ) 
    7879      !                                      ! Arrays, scalars initialization  
    7980      overlap       = 0 
     
    152153      ! 
    153154      CALL wrk_dealloc( jpi, jpj, jpk, zmask, ztab3d ) 
     155      DEALLOCATE( cl ) 
    154156      ! 
    155157   END SUBROUTINE prt_ctl_trc 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/trc.F90

    r6140 r7403  
    2828   INTEGER, PUBLIC                                                 ::   numnat_cfg = -1   !: logical unit for the reference passive tracer namelist_top_cfg 
    2929   INTEGER, PUBLIC                                                 ::   numont     = -1   !: logical unit for the reference passive tracer namelist output output.namelist.top 
     30   INTEGER, PUBLIC                                                 ::   numtrc_ref = -1   !: logical unit for the reference passive tracer namelist_top_ref 
     31   INTEGER, PUBLIC                                                 ::   numtrc_cfg = -1   !: logical unit for the reference passive tracer namelist_top_cfg 
     32   INTEGER, PUBLIC                                                 ::   numonr     = -1   !: logical unit for the reference passive tracer namelist output output.namelist.top 
    3033   INTEGER, PUBLIC                                                 ::   numstr        !: logical unit for tracer statistics 
    3134   INTEGER, PUBLIC                                                 ::   numrtr        !: logical unit for trc restart (read ) 
     
    6871   CHARACTER(len = 256), PUBLIC                                    ::  cn_trcrst_outdir  !: restart output directory 
    6972   REAL(wp)            , PUBLIC                                    ::  rdttrc         !: passive tracer time step 
    70    LOGICAL             , PUBLIC                                    ::  ln_top_euler  !: boolean term for euler integration  
     73   REAL(wp)            , PUBLIC                                    ::  r2dttrc        !: = 2*rdttrc except at nit000 (=rdttrc) if neuler=0 
     74   LOGICAL             , PUBLIC                                    ::  ln_top_euler   !: boolean term for euler integration  
    7175   LOGICAL             , PUBLIC                                    ::  ln_trcdta      !: Read inputs data from files 
    7276   LOGICAL             , PUBLIC                                    ::  ln_trcdmp      !: internal damping flag 
    7377   LOGICAL             , PUBLIC                                    ::  ln_trcdmp_clo  !: internal damping flag on closed seas 
    74    INTEGER             , PUBLIC                                    ::  nittrc000       !: first time step of passive tracers model 
     78   INTEGER             , PUBLIC                                    ::  nittrc000      !: first time step of passive tracers model 
    7579   LOGICAL             , PUBLIC                                    ::  l_trcdm2dc     !: Diurnal cycle for TOP 
    7680 
     
    8387   END TYPE 
    8488 
    85    REAL(wp), DIMENSION(jptra), PUBLIC         :: trc_ice_ratio, & ! ice-ocean tracer ratio 
    86                                                  trc_ice_prescr   ! prescribed ice trc cc 
    87    CHARACTER(len=2), DIMENSION(jptra), PUBLIC :: cn_trc_o ! choice of ocean tracer cc 
     89   REAL(wp)        , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)  :: trc_ice_ratio      ! ice-ocean tracer ratio 
     90   REAL(wp)        , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)  :: trc_ice_prescr     ! prescribed ice trc cc 
     91   CHARACTER(len=2), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)  :: cn_trc_o ! choice of ocean tracer cc 
     92 
    8893 
    8994   !! information for outputs 
     
    9499       CHARACTER(len = 20)  :: clunit   !: unit 
    95100       LOGICAL              :: llinit   !: read in a file or not 
    96 #if defined  key_my_trc 
    97101       LOGICAL              :: llsbc   !: read in a file or not 
    98102       LOGICAL              :: llcbc   !: read in a file or not 
    99103       LOGICAL              :: llobc   !: read in a file or not 
    100 #endif 
    101        LOGICAL              :: llsave   !: save the tracer or not 
    102104   END TYPE PTRACER 
     105 
    103106   CHARACTER(len = 20), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)    ::  ctrcnm         !: tracer name  
    104107   CHARACTER(len = 80), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)    ::  ctrcln         !: trccer field long name 
    105108   CHARACTER(len = 20), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)    ::  ctrcun         !: tracer unit 
    106    LOGICAL            , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)    ::  ln_trc_wri     !: save the tracer or not 
    107109 
    108110   TYPE, PUBLIC :: DIAG                                                               !: passive trcacer ddditional diagnostic type 
     
    112114   END TYPE DIAG 
    113115 
     116   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:)         ::  trc3d          !: 3D diagnostics for tracers 
     117   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:)         ::  trc2d          !: 2D diagnostics for tracers 
     118 
    114119   !! information for inputs 
    115120   !! -------------------------------------------------- 
    116    LOGICAL            , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)    ::  ln_trc_ini     !: Initialisation from data input file 
    117    LOGICAL            , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)    ::  ln_trc_obc     !: Use open boundary condition data 
    118    LOGICAL            , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)    ::  ln_trc_sbc     !: Use surface boundary condition data 
    119    LOGICAL            , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)    ::  ln_trc_cbc     !: Use coastal boundary condition data 
    120  
    121    !! additional 2D/3D outputs namelist 
    122    !! -------------------------------------------------- 
    123    REAL(wp)           , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,  :) ::   trc2d         !: additional 2d outputs array  
    124    REAL(wp)           , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::   trc3d         !: additional 3d outputs array  
    125    CHARACTER(len = 20), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)       ::   ctrc2d        !: 2d field short name 
    126    CHARACTER(len = 80), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)       ::   ctrc2l        !: 2d field long name 
    127    CHARACTER(len = 20), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)       ::   ctrc2u        !: 2d field unit 
    128    CHARACTER(len = 20), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)       ::   ctrc3d        !: 3d field short name 
    129    CHARACTER(len = 80), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)       ::   ctrc3l        !: 3d field long name 
    130    CHARACTER(len = 20), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)       ::   ctrc3u        !: 3d field unit 
    131    LOGICAL            , PUBLIC                                        ::  ln_diatrc      !: boolean term for additional diagnostic 
    132    INTEGER            , PUBLIC                                        ::  nn_writedia    !: frequency of additional outputs 
    133  
    134    !! Biological trends 
    135    !! ----------------- 
    136    LOGICAL            , PUBLIC                                        ::  ln_diabio      !: boolean term for biological diagnostic 
    137    INTEGER            , PUBLIC                                        ::  nn_writebio    !: frequency of biological outputs 
    138    REAL(wp)           , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) ::  trbio          !: biological trends 
    139    CHARACTER(len = 20), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)       ::  ctrbio         !: bio field short name 
    140    CHARACTER(len = 80), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)       ::  ctrbil         !: bio field long name 
    141    CHARACTER(len = 20), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)       ::  ctrbiu         !: bio field unit 
     121   LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)    ::  ln_trc_ini     !: Initialisation from data input file 
     122   LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)    ::  ln_trc_obc     !: Use open boundary condition data 
     123   LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)    ::  ln_trc_sbc     !: Use surface boundary condition data 
     124   LOGICAL , PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:)    ::  ln_trc_cbc     !: Use coastal boundary condition data 
     125   LOGICAL , PUBLIC                                     ::  ln_rnf_ctl     !: remove runoff dilution on tracers 
     126   REAL(wp), PUBLIC                                     ::  rn_bc_time     !: Time scaling factor for SBC and CBC data (seconds in a day) 
     127 
    142128 
    143129   !! variables to average over physics over passive tracer sub-steps. 
     
    211197      USE lib_mpp, ONLY: ctl_warn 
    212198      !!------------------------------------------------------------------- 
     199      INTEGER :: ierr(3) 
     200      !!------------------------------------------------------------------- 
     201      ierr(:) = 0 
    213202      ! 
    214203      ALLOCATE( trn(jpi,jpj,jpk,jptra), trb(jpi,jpj,jpk,jptra), tra(jpi,jpj,jpk,jptra),       &   
     
    216205         &      gtru (jpi,jpj,jptra)  , gtrv (jpi,jpj,jptra)                          ,       & 
    217206         &      gtrui(jpi,jpj,jptra)  , gtrvi(jpi,jpj,jptra)                          ,       & 
     207         &      trc_ice_ratio(jptra)  , trc_ice_prescr(jptra) , cn_trc_o(jptra)       ,       & 
    218208         &      sbc_trc_b(jpi,jpj,jptra), sbc_trc(jpi,jpj,jptra)                      ,       &   
    219          &      cvol(jpi,jpj,jpk)     , trai(jptra)                                   ,       & 
    220          &      ctrcnm(jptra)         , ctrcln(jptra)         , ctrcun(jptra)         ,       &  
    221          &      ln_trc_ini(jptra)     , ln_trc_wri(jptra)     , qsr_mean(jpi,jpj)     ,       & 
    222 #if defined key_my_trc 
     209         &      cvol(jpi,jpj,jpk)     , trai(jptra)           , qsr_mean(jpi,jpj)     ,       & 
     210         &      ctrcnm(jptra)         , ctrcln(jptra)         , ctrcun(jptra)         ,       & 
     211         &      ln_trc_ini(jptra)     ,                                                       & 
    223212         &      ln_trc_sbc(jptra)     , ln_trc_cbc(jptra)     , ln_trc_obc(jptra)     ,       & 
    224 #endif 
    225213#if defined key_bdy 
    226214         &      cn_trc_dflt(nb_bdy)   , cn_trc(nb_bdy)        , nn_trcdmp_bdy(nb_bdy) ,       & 
    227215         &      trcdta_bdy(jptra,nb_bdy)                                              ,       & 
    228216#endif 
    229          &      STAT = trc_alloc  ) 
    230  
     217         &      STAT = ierr(1)  ) 
     218      ! 
     219      IF (jp_dia3d > 0 ) ALLOCATE( trc3d(jpi,jpj,jpk,jp_dia3d), STAT = ierr(2) ) 
     220      ! 
     221      IF (jp_dia2d > 0 ) ALLOCATE( trc2d(jpi,jpj,jpk,jp_dia2d), STAT = ierr(3) ) 
     222      !  
     223      trc_alloc = MAXVAL( ierr ) 
    231224      IF( trc_alloc /= 0 )   CALL ctl_warn('trc_alloc: failed to allocate arrays') 
    232225      ! 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/trcbc.F90

    r6140 r7403  
    44   !! TOP :  module for passive tracer boundary conditions 
    55   !!===================================================================== 
    6    !! History :  3.5 !  2014-04  (M. Vichi, T. Lovato)  Original 
    7    !!            3.6 !  2015-03  (T . Lovato) Revision and BDY support 
     6   !! History :  3.5 !  2014 (M. Vichi, T. Lovato)  Original 
     7   !!            3.6 !  2015 (T . Lovato) Revision and BDY support 
     8   !!            4.0 !  2016 (T . Lovato) Include application of sbc and cbc 
    89   !!---------------------------------------------------------------------- 
    910#if defined key_top 
     
    1112   !!   'key_top'                                                TOP model  
    1213   !!---------------------------------------------------------------------- 
    13    !!   trc_bc       : read and time interpolated tracer Boundary Conditions 
     14   !!   trc_bc       :  Apply tracer Boundary Conditions 
    1415   !!---------------------------------------------------------------------- 
    1516   USE par_trc       !  passive tracers parameters 
     
    2627   PRIVATE 
    2728 
    28    PUBLIC   trc_bc_init    ! called in trcini.F90  
    29    PUBLIC   trc_bc_read    ! called in trcstp.F90 or within 
     29   PUBLIC   trc_bc         ! called in trcstp.F90 or within TOP modules 
     30   PUBLIC   trc_bc_ini     ! called in trcini.F90  
    3031 
    3132   INTEGER  , SAVE, PUBLIC                             :: nb_trcobc    ! number of tracers with open BC 
     
    4344   TYPE(MAP_POINTER), ALLOCATABLE, DIMENSION(:) :: nbmap_ptr   ! array of pointers to nbmap 
    4445 
    45    !!---------------------------------------------------------------------- 
    46    !! NEMO/OPA 3.6 , NEMO Consortium (2015) 
     46   !! * Substitutions 
     47#  include "vectopt_loop_substitute.h90" 
     48   !!---------------------------------------------------------------------- 
     49   !! NEMO/TOP 4.0 , NEMO Consortium (2016) 
    4750   !! $Id$ 
    4851   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    5053CONTAINS 
    5154 
    52    SUBROUTINE trc_bc_init( ntrc ) 
     55   SUBROUTINE trc_bc_ini( ntrc ) 
    5356      !!---------------------------------------------------------------------- 
    54       !!                   ***  ROUTINE trc_bc_init  *** 
     57      !!                   ***  ROUTINE trc_bc_ini  *** 
    5558      !!                     
    5659      !! ** Purpose :   initialisation of passive tracer BC data  
     
    7780      REAL(wp)   , DIMENSION(jpmaxtrc) :: rn_trcfac    ! multiplicative factor for tracer values 
    7881      !! 
    79       NAMELIST/namtrc_bc/ cn_dir_sbc, cn_dir_cbc, cn_dir_obc, sn_trcobc, rn_trofac, sn_trcsbc, rn_trsfac, sn_trccbc, rn_trcfac 
     82      NAMELIST/namtrc_bc/ cn_dir_obc, sn_trcobc, rn_trofac, cn_dir_sbc, sn_trcsbc, rn_trsfac, &  
     83                        & cn_dir_cbc, sn_trccbc, rn_trcfac, ln_rnf_ctl, rn_bc_time 
    8084#if defined key_bdy 
    8185      NAMELIST/namtrc_bdy/ cn_trc_dflt, cn_trc, nn_trcdmp_bdy 
    8286#endif 
    8387      !!---------------------------------------------------------------------- 
    84       IF( nn_timing == 1 )  CALL timing_start('trc_bc_init') 
     88      IF( nn_timing == 1 )  CALL timing_start('trc_bc_ini') 
    8589      ! 
    8690      IF( lwp ) THEN 
    8791         WRITE(numout,*) ' ' 
    88          WRITE(numout,*) 'trc_bc_init : Tracers Boundary Conditions (BC)' 
     92         WRITE(numout,*) 'trc_bc_ini : Tracers Boundary Conditions (BC)' 
    8993         WRITE(numout,*) '~~~~~~~~~~~ ' 
    9094      ENDIF 
     
    9397      ALLOCATE( slf_i(ntrc), STAT=ierr0 ) 
    9498      IF( ierr0 > 0 ) THEN 
    95          CALL ctl_stop( 'trc_bc_init: unable to allocate local slf_i' )   ;   RETURN 
     99         CALL ctl_stop( 'trc_bc_ini: unable to allocate local slf_i' )   ;   RETURN 
    96100      ENDIF 
    97101 
     
    99103      ALLOCATE( n_trc_indobc(ntrc), STAT=ierr0 ) 
    100104      IF( ierr0 > 0 ) THEN 
    101          CALL ctl_stop( 'trc_bc_init: unable to allocate n_trc_indobc' )   ;   RETURN 
     105         CALL ctl_stop( 'trc_bc_ini: unable to allocate n_trc_indobc' )   ;   RETURN 
    102106      ENDIF 
    103107      nb_trcobc      = 0 
     
    106110      ALLOCATE( n_trc_indsbc(ntrc), STAT=ierr0 ) 
    107111      IF( ierr0 > 0 ) THEN 
    108          CALL ctl_stop( 'trc_bc_init: unable to allocate n_trc_indsbc' )   ;   RETURN 
     112         CALL ctl_stop( 'trc_bc_ini: unable to allocate n_trc_indsbc' )   ;   RETURN 
    109113      ENDIF 
    110114      nb_trcsbc      = 0 
     
    113117      ALLOCATE( n_trc_indcbc(ntrc), STAT=ierr0 ) 
    114118      IF( ierr0 > 0 ) THEN 
    115          CALL ctl_stop( 'trc_bc_init: unable to allocate n_trc_indcbc' )   ;   RETURN 
     119         CALL ctl_stop( 'trc_bc_ini: unable to allocate n_trc_indcbc' )   ;   RETURN 
    116120      ENDIF 
    117121      nb_trccbc      = 0 
     
    140144      DO jn = 1, ntrc 
    141145         DO ib = 1, nb_bdy 
    142             ! Set type of obc in BDY data structure (around here we may plug user override of obc type from nml) 
     146            ! Set type of obc in BDY data structure (TL: around here we may plug user override of obc type from nml) 
    143147            IF ( ln_trc_obc(jn) ) THEN 
    144148               trcdta_bdy(jn,ib)%cn_obc = TRIM( cn_trc(ib) ) 
     
    195199         ENDIF 
    196200         WRITE(numout,'(2a)') '   COASTAL BC data repository : ', TRIM(cn_dir_cbc) 
    197  
     201         IF ( .NOT. ln_rnf ) ln_rnf_ctl = .FALSE. 
     202         IF ( ln_rnf_ctl )  WRITE(numout,'(a)') ' -> Remove runoff dilution effect on tracers with absent river load (ln_rnf_ctl = .TRUE.)'  
    198203         WRITE(numout,*) ' ' 
    199204         WRITE(numout,'(a,i3)') '   Total tracers to be initialized with OPEN BCs data:', nb_trcobc 
     
    230235         ALLOCATE ( sf_trcobc(nb_trcobc), rf_trofac(nb_trcobc), nbmap_ptr(nb_trcobc), STAT=ierr1 ) 
    231236         IF( ierr1 > 0 ) THEN 
    232             CALL ctl_stop( 'trc_bc_init: unable to allocate sf_trcobc structure' )   ;   RETURN 
     237            CALL ctl_stop( 'trc_bc_ini: unable to allocate sf_trcobc structure' )   ;   RETURN 
    233238         ENDIF 
    234239 
     
    248253                  IF( sn_trcobc(jn)%ln_tint )  ALLOCATE( sf_trcobc(jl)%fdta(nblen,1,jpk,2) , STAT=ierr3 ) 
    249254                  IF( ierr2 + ierr3 > 0 ) THEN 
    250                     CALL ctl_stop( 'trc_bc_init : unable to allocate passive tracer OBC data arrays' )   ;   RETURN 
     255                    CALL ctl_stop( 'trc_bc_ini : unable to allocate passive tracer OBC data arrays' )   ;   RETURN 
    251256                  ENDIF 
    252257                  trcdta_bdy(jn,ib)%trc => sf_trcobc(jl)%fnow(:,1,:) 
     
    270275         ENDDO 
    271276 
    272          CALL fld_fill( sf_trcobc, slf_i, cn_dir_obc, 'trc_bc_init', 'Passive tracer OBC data', 'namtrc_bc' ) 
     277         CALL fld_fill( sf_trcobc, slf_i, cn_dir_obc, 'trc_bc_ini', 'Passive tracer OBC data', 'namtrc_bc' ) 
    273278      ENDIF 
    274279#endif 
     
    277282         ALLOCATE( sf_trcsbc(nb_trcsbc), rf_trsfac(nb_trcsbc), STAT=ierr1 ) 
    278283         IF( ierr1 > 0 ) THEN 
    279             CALL ctl_stop( 'trc_bc_init: unable to allocate  sf_trcsbc structure' )   ;   RETURN 
     284            CALL ctl_stop( 'trc_bc_ini: unable to allocate  sf_trcsbc structure' )   ;   RETURN 
    280285         ENDIF 
    281286         ! 
     
    288293               IF( sn_trcsbc(jn)%ln_tint )  ALLOCATE( sf_trcsbc(jl)%fdta(jpi,jpj,1,2) , STAT=ierr3 ) 
    289294               IF( ierr2 + ierr3 > 0 ) THEN 
    290                  CALL ctl_stop( 'trc_bc_init : unable to allocate passive tracer SBC data arrays' )   ;   RETURN 
     295                 CALL ctl_stop( 'trc_bc_ini : unable to allocate passive tracer SBC data arrays' )   ;   RETURN 
    291296               ENDIF 
    292297            ENDIF 
     
    294299         ENDDO 
    295300         !                         ! fill sf_trcsbc with slf_i and control print 
    296          CALL fld_fill( sf_trcsbc, slf_i, cn_dir_sbc, 'trc_bc_init', 'Passive tracer SBC data', 'namtrc_bc' ) 
     301         CALL fld_fill( sf_trcsbc, slf_i, cn_dir_sbc, 'trc_bc_ini', 'Passive tracer SBC data', 'namtrc_bc' ) 
    297302         ! 
    298303      ENDIF 
     
    319324         ENDDO 
    320325         !                         ! fill sf_trccbc with slf_i and control print 
    321          CALL fld_fill( sf_trccbc, slf_i, cn_dir_cbc, 'trc_bc_init', 'Passive tracer CBC data', 'namtrc_bc' ) 
     326         CALL fld_fill( sf_trccbc, slf_i, cn_dir_cbc, 'trc_bc_ini', 'Passive tracer CBC data', 'namtrc_bc' ) 
    322327         ! 
    323328      ENDIF 
    324329      ! 
    325330      DEALLOCATE( slf_i )          ! deallocate local field structure 
    326       IF( nn_timing == 1 )  CALL timing_stop('trc_bc_init') 
    327       ! 
    328    END SUBROUTINE trc_bc_init 
    329  
    330  
    331    SUBROUTINE trc_bc_read(kt, jit) 
     331      IF( nn_timing == 1 )  CALL timing_stop('trc_bc_ini') 
     332      ! 
     333   END SUBROUTINE trc_bc_ini 
     334 
     335 
     336   SUBROUTINE trc_bc(kt, jit) 
    332337      !!---------------------------------------------------------------------- 
    333       !!                   ***  ROUTINE trc_bc_init  *** 
     338      !!                   ***  ROUTINE trc_bc  *** 
    334339      !! 
    335       !! ** Purpose :  Read passive tracer Boundary Conditions data 
     340      !! ** Purpose :  Apply Boundary Conditions data to tracers 
    336341      !! 
    337       !! ** Method  :  Read BC inputs and update data structures using fldread 
     342      !! ** Method  :  1) Read BC inputs and update data structures using fldread 
     343      !!               2) Apply Boundary Conditions to tracers 
    338344      !!               
    339345      !!---------------------------------------------------------------------- 
     
    341347       
    342348      !! * Arguments 
    343       INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
     349      INTEGER, INTENT( in ) ::   kt              ! ocean time-step index 
    344350      INTEGER, INTENT( in ), OPTIONAL ::   jit   ! subcycle time-step index (for timesplitting option) 
     351      !! 
     352      INTEGER  :: ji, jj, jk, jn, jl             ! Loop index 
     353      REAL(wp) :: zfact, zrnf 
    345354      !!--------------------------------------------------------------------- 
    346355      ! 
    347       IF( nn_timing == 1 )  CALL timing_start('trc_bc_read') 
     356      IF( nn_timing == 1 )  CALL timing_start('trc_bc') 
    348357 
    349358      IF( kt == nit000 .AND. lwp) THEN 
    350359         WRITE(numout,*) 
    351          WRITE(numout,*) 'trc_bc_read : Surface boundary conditions for passive tracers.' 
     360         WRITE(numout,*) 'trc_bc : Surface boundary conditions for passive tracers.' 
    352361         WRITE(numout,*) '~~~~~~~~~~~ ' 
    353362      ENDIF 
    354363 
     364      ! 1. Update Boundary conditions data 
    355365      IF ( PRESENT(jit) ) THEN  
    356366 
     
    395405      ENDIF 
    396406 
    397       ! 
    398       IF( nn_timing == 1 )  CALL timing_stop('trc_bc_read') 
    399       ! 
    400    END SUBROUTINE trc_bc_read 
     407      ! 2. Apply Boundary conditions data 
     408      !  
     409      DO jn = 1 , jptra 
     410         ! 
     411         ! Remove river dilution for tracers with absent river load 
     412         IF ( ln_rnf_ctl .AND. .NOT. ln_trc_cbc(jn) ) THEN 
     413            DO jj = 2, jpj 
     414               DO ji = fs_2, fs_jpim1 
     415                  DO jk = 1, nk_rnf(ji,jj) 
     416                     zrnf = (rnf(ji,jj) + rnf_b(ji,jj)) * 0.5_wp * r1_rau0 / h_rnf(ji,jj) 
     417                     tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn)  + (trn(ji,jj,jk,jn) * zrnf) 
     418                  ENDDO 
     419               ENDDO 
     420            ENDDO 
     421         ENDIF 
     422           
     423         ! OPEN boundary conditions: trcbdy is called in trcnxt ! 
     424 
     425         ! SURFACE boundary conditions 
     426         IF (ln_trc_sbc(jn)) THEN 
     427            jl = n_trc_indsbc(jn) 
     428            DO jj = 2, jpj 
     429               DO ji = fs_2, fs_jpim1   ! vector opt. 
     430                  zfact = 1. / ( e3t_n(ji,jj,1) * rn_bc_time ) 
     431                  tra(ji,jj,1,jn) = tra(ji,jj,1,jn) + rf_trsfac(jl) * sf_trcsbc(jl)%fnow(ji,jj,1) * zfact 
     432               END DO 
     433            END DO 
     434         END IF 
     435 
     436         ! COASTAL boundary conditions 
     437         IF ( ln_rnf .AND. ln_trc_cbc(jn)) THEN 
     438            jl = n_trc_indcbc(jn) 
     439            DO jj = 2, jpj 
     440               DO ji = fs_2, fs_jpim1   ! vector opt. 
     441                  DO jk = 1, nk_rnf(ji,jj) 
     442                     zfact = rn_rfact / ( e1e2t(ji,jj) * h_rnf(ji,jj) * rn_bc_time )  
     443                     tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + rf_trcfac(jl) * sf_trccbc(jl)%fnow(ji,jj,1) * zfact 
     444                  ENDDO 
     445               END DO 
     446            END DO 
     447         END IF 
     448         !                                                       ! =========== 
     449      END DO                                                     ! tracer loop 
     450      !                                                          ! =========== 
     451      ! 
     452      IF( nn_timing == 1 )  CALL timing_stop('trc_bc') 
     453      ! 
     454   END SUBROUTINE trc_bc 
    401455 
    402456#else 
     
    406460CONTAINS 
    407461 
    408    SUBROUTINE trc_bc_init( ntrc )        ! Empty routine 
     462   SUBROUTINE trc_bc_ini( ntrc )        ! Empty routine 
    409463      INTEGER,INTENT(IN) :: ntrc                           ! number of tracers 
    410       WRITE(*,*) 'trc_bc_init: You should not have seen this print! error?', kt 
    411    END SUBROUTINE trc_bc_init 
    412  
    413    SUBROUTINE trc_bc_read( kt )        ! Empty routine 
    414       WRITE(*,*) 'trc_bc_read: You should not have seen this print! error?', kt 
    415    END SUBROUTINE trc_bc_read 
     464      WRITE(*,*) 'trc_bc_ini: You should not have seen this print! error?', kt 
     465   END SUBROUTINE trc_bc_ini 
     466 
     467   SUBROUTINE trc_bc( kt )        ! Empty routine 
     468      WRITE(*,*) 'trc_bc: You should not have seen this print! error?', kt 
     469   END SUBROUTINE trc_bc 
    416470#endif 
    417471 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/trcdta.F90

    r6701 r7403  
    99   !!            3.4   !  2010-11  (C. Ethe, G. Madec)  use of fldread + dynamical allocation  
    1010   !!            3.5   !  2013-08  (M. Vichi)  generalization for other BGC models 
    11    !!            3.6   !  2015-03  (T. Lovato) revision of code log info 
     11   !!            3.6   !  2015-03  (T. Lovato) revisit code I/O 
    1212   !!---------------------------------------------------------------------- 
    1313#if defined key_top  
     
    2828 
    2929   PUBLIC   trc_dta         ! called in trcini.F90 and trcdmp.F90 
    30    PUBLIC   trc_dta_init    ! called in trcini.F90  
     30   PUBLIC   trc_dta_ini     ! called in trcini.F90  
    3131 
    3232   INTEGER  , SAVE, PUBLIC                             :: nb_trcdta   ! number of tracers to be initialised with data 
     
    4545CONTAINS 
    4646 
    47    SUBROUTINE trc_dta_init(ntrc) 
    48       !!---------------------------------------------------------------------- 
    49       !!                   ***  ROUTINE trc_dta_init  *** 
     47   SUBROUTINE trc_dta_ini(ntrc) 
     48      !!---------------------------------------------------------------------- 
     49      !!                   ***  ROUTINE trc_dta_ini  *** 
    5050      !!                     
    5151      !! ** Purpose :   initialisation of passive tracer input data  
     
    7070      !!---------------------------------------------------------------------- 
    7171      ! 
    72       IF( nn_timing == 1 )  CALL timing_start('trc_dta_init') 
     72      IF( nn_timing == 1 )  CALL timing_start('trc_dta_ini') 
    7373      ! 
    7474      IF( lwp ) THEN 
    7575         WRITE(numout,*) ' ' 
    76          WRITE(numout,*) '  trc_dta_init : Tracers Initial Conditions (IC)' 
     76         WRITE(numout,*) '  trc_dta_ini : Tracers Initial Conditions (IC)' 
    7777         WRITE(numout,*) '  ~~~~~~~~~~~ ' 
    7878      ENDIF 
     
    8383      ALLOCATE( n_trc_index(ntrc), slf_i(ntrc), STAT=ierr0 ) 
    8484      IF( ierr0 > 0 ) THEN 
    85          CALL ctl_stop( 'trc_dta_init: unable to allocate n_trc_index' )   ;   RETURN 
     85         CALL ctl_stop( 'trc_dta_ini: unable to allocate n_trc_index' )   ;   RETURN 
    8686      ENDIF 
    8787      nb_trcdta      = 0 
     
    103103      REWIND( numnat_ref )              ! Namelist namtrc_dta in reference namelist : Passive tracer input data 
    104104      READ  ( numnat_ref, namtrc_dta, IOSTAT = ios, ERR = 901) 
    105 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_dta_init in reference namelist', lwp ) 
     105901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_dta_ini in reference namelist', lwp ) 
    106106 
    107107      REWIND( numnat_cfg )              ! Namelist namtrc_dta in configuration namelist : Passive tracer input data 
    108108      READ  ( numnat_cfg, namtrc_dta, IOSTAT = ios, ERR = 902 ) 
    109 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_dta_init in configuration namelist', lwp ) 
     109902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_dta_ini in configuration namelist', lwp ) 
    110110      IF(lwm) WRITE ( numont, namtrc_dta ) 
    111111 
     
    118118               zfact  = rn_trfac(jn) 
    119119               IF( clndta /=  clntrc ) THEN  
    120                   CALL ctl_warn( 'trc_dta_init: passive tracer data initialisation    ',   & 
     120                  CALL ctl_warn( 'trc_dta_ini: passive tracer data initialisation    ',   & 
    121121                  &              'Input name of data file : '//TRIM(clndta)//   & 
    122122                  &              ' differs from that of tracer : '//TRIM(clntrc)//' ') 
     
    132132         ALLOCATE( sf_trcdta(nb_trcdta), rf_trfac(nb_trcdta), STAT=ierr1 ) 
    133133         IF( ierr1 > 0 ) THEN 
    134             CALL ctl_stop( 'trc_dta_init: unable to allocate  sf_trcdta structure' )   ;   RETURN 
     134            CALL ctl_stop( 'trc_dta_ini: unable to allocate  sf_trcdta structure' )   ;   RETURN 
    135135         ENDIF 
    136136         ! 
     
    143143               IF( sn_trcdta(jn)%ln_tint )  ALLOCATE( sf_trcdta(jl)%fdta(jpi,jpj,jpk,2) , STAT=ierr3 ) 
    144144               IF( ierr2 + ierr3 > 0 ) THEN 
    145                  CALL ctl_stop( 'trc_dta_init : unable to allocate passive tracer data arrays' )   ;   RETURN 
     145                 CALL ctl_stop( 'trc_dta_ini : unable to allocate passive tracer data arrays' )   ;   RETURN 
    146146               ENDIF 
    147147            ENDIF 
     
    149149         ENDDO 
    150150         !                         ! fill sf_trcdta with slf_i and control print 
    151          CALL fld_fill( sf_trcdta, slf_i, cn_dir, 'trc_dta_init', 'Passive tracer data', 'namtrc' ) 
     151         CALL fld_fill( sf_trcdta, slf_i, cn_dir, 'trc_dta_ini', 'Passive tracer data', 'namtrc' ) 
    152152         ! 
    153153      ENDIF 
    154154      ! 
    155155      DEALLOCATE( slf_i )          ! deallocate local field structure 
    156       IF( nn_timing == 1 )  CALL timing_stop('trc_dta_init') 
    157       ! 
    158    END SUBROUTINE trc_dta_init 
    159  
    160  
    161    SUBROUTINE trc_dta( kt, sf_trcdta, ptrfac, ptrc) 
     156      IF( nn_timing == 1 )  CALL timing_stop('trc_dta_ini') 
     157      ! 
     158   END SUBROUTINE trc_dta_ini 
     159 
     160 
     161   SUBROUTINE trc_dta( kt, sf_trcdta, ztrcfac, ztrcdta) 
    162162      !!---------------------------------------------------------------------- 
    163163      !!                   ***  ROUTINE trc_dta  *** 
     
    169169      !!              - ln_trcdmp=F: deallocates the data structure as they are not used 
    170170      !! 
    171       !! ** Action  :   sf_trcdta   passive tracer data on medl mesh and interpolated at time-step kt 
    172       !!---------------------------------------------------------------------- 
    173       INTEGER                     , INTENT(in   ) ::   kt     ! ocean time-step 
    174       TYPE(FLD), DIMENSION(1)     , INTENT(inout) ::   sf_trcdta     ! array of information on the field to read 
    175       REAL(wp)                    , INTENT(in   ) ::   ptrfac  ! multiplication factor 
    176       REAL(wp), DIMENSION(jpi,jpj,jpk), OPTIONAL  , INTENT(out  ) ::   ptrc 
     171      !! ** Action  :   sf_trcdta   passive tracer data on meld mesh and interpolated at time-step kt 
     172      !!---------------------------------------------------------------------- 
     173      INTEGER                          , INTENT(in   )   ::   kt         ! ocean time-step 
     174      TYPE(FLD), DIMENSION(1)          , INTENT(inout)   ::   sf_trcdta  ! array of information on the field to read 
     175      REAL(wp)                         , INTENT(in   )   ::   ztrcfac    ! multiplication factor 
     176      REAL(wp),  DIMENSION(jpi,jpj,jpk), INTENT(inout  ) ::   ztrcdta    ! 3D data array 
    177177      ! 
    178178      INTEGER ::   ji, jj, jk, jl, jkk, ik    ! dummy loop indices 
    179179      REAL(wp)::   zl, zi 
    180180      REAL(wp), DIMENSION(jpk) ::  ztp                ! 1D workspace 
    181       REAL(wp), POINTER, DIMENSION(:,:,:) ::  ztrcdta   ! 3D  workspace 
    182181      CHARACTER(len=100) :: clndta 
    183182      !!---------------------------------------------------------------------- 
     
    187186      IF( nb_trcdta > 0 ) THEN 
    188187         ! 
    189          CALL wrk_alloc( jpi, jpj, jpk, ztrcdta )    ! Memory allocation 
    190          ! 
    191          CALL fld_read( kt, 1, sf_trcdta )      !==   read data at kt time step   ==! 
    192          ztrcdta(:,:,:) = sf_trcdta(1)%fnow(:,:,:) * tmask(:,:,:)    ! Mask 
    193          ! 
    194          IF( ln_sco ) THEN                   !==   s- or mixed s-zps-coordinate   ==! 
     188         ! read data at kt time step 
     189         CALL fld_read( kt, 1, sf_trcdta ) 
     190         ztrcdta(:,:,:) = sf_trcdta(1)%fnow(:,:,:) * tmask(:,:,:) 
     191         !  
     192         IF( ln_sco ) THEN                !== s- or mixed s-zps-coordinate  ==! 
    195193            ! 
    196194            IF( kt == nit000 .AND. lwp )THEN 
     
    205203                        ztp(jk) = ztrcdta(ji,jj,1) 
    206204                     ELSEIF( zl > gdept_1d(jpk) ) THEN         ! below the last level of data 
    207                         ztp(jk) =  ztrcdta(ji,jj,jpkm1) 
     205                        ztp(jk) = ztrcdta(ji,jj,jpkm1) 
    208206                     ELSE                                      ! inbetween : vertical interpolation between jkk & jkk+1 
    209207                        DO jkk = 1, jpkm1                                  ! when  gdept(jkk) < zl < gdept(jkk+1) 
    210208                           IF( (zl-gdept_1d(jkk)) * (zl-gdept_1d(jkk+1)) <= 0._wp ) THEN 
    211209                              zi = ( zl - gdept_1d(jkk) ) / (gdept_1d(jkk+1)-gdept_1d(jkk)) 
    212                               ztp(jk) = ztrcdta(ji,jj,jkk) + ( ztrcdta(ji,jj,jkk+1) - & 
    213                                         ztrcdta(ji,jj,jkk) ) * zi  
     210                              ztp(jk) = ztrcdta(ji,jj,jkk) + ( ztrcdta(ji,jj,jkk+1) - ztrcdta(ji,jj,jkk) ) * zi 
    214211                           ENDIF 
    215212                        END DO 
     
    217214                  END DO 
    218215                  DO jk = 1, jpkm1 
    219                     ztrcdta(ji,jj,jk) = ztp(jk) * tmask(ji,jj,jk)     ! mask required for mixed zps-s-coord 
     216                     ztrcdta(ji,jj,jk) = ztp(jk) * tmask(ji,jj,jk)     ! mask required for mixed zps-s-coord 
    220217                  END DO 
    221218                  ztrcdta(ji,jj,jpk) = 0._wp 
     
    224221            !  
    225222         ELSE                                !==   z- or zps- coordinate   ==! 
    226             ! 
    227             IF( ln_zps ) THEN                      ! zps-coordinate (partial steps) interpolation at the last ocean level 
     223            ! zps-coordinate (partial steps) interpolation at the last ocean level 
     224            IF( ln_zps ) THEN 
    228225               DO jj = 1, jpj 
    229226                  DO ji = 1, jpi 
     
    244241         ENDIF 
    245242         ! 
    246          ! Add multiplicative factor 
    247          ztrcdta(:,:,:) = ztrcdta(:,:,:) * ptrfac 
    248          ! 
    249          ! Data structure for trc_ini (and BFMv5.1 coupling) 
    250          IF( .NOT. PRESENT(ptrc) ) sf_trcdta(1)%fnow(:,:,:) = ztrcdta(:,:,:) 
    251          ! 
    252          ! Data structure for trc_dmp 
    253          IF( PRESENT(ptrc) )  ptrc(:,:,:) = ztrcdta(:,:,:) 
    254          ! 
    255          CALL wrk_dealloc( jpi, jpj, jpk, ztrcdta ) 
     243         ! Scale by multiplicative factor 
     244         ztrcdta(:,:,:) = ztrcdta(:,:,:) * ztrcfac 
    256245         ! 
    257246      ENDIF 
     
    266255   !!---------------------------------------------------------------------- 
    267256CONTAINS 
    268    SUBROUTINE trc_dta( kt, sf_trcdta, ptrfac, ptrc)        ! Empty routine 
     257   SUBROUTINE trc_dta( kt, sf_trcdta, ztrcfac, ztrcdta)        ! Empty routine 
    269258      WRITE(*,*) 'trc_dta: You should not have seen this print! error?', kt 
    270259   END SUBROUTINE trc_dta 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/trcice.F90

    r5385 r7403  
    1717   USE trcice_cfc      ! CFC      initialisation 
    1818   USE trcice_pisces   ! PISCES   initialisation 
    19    USE trcice_c14b     ! C14 bomb initialisation 
     19   USE trcice_c14      ! C14 bomb initialisation 
     20   USE trcice_age      ! aGE initialisation 
    2021   USE trcice_my_trc   ! MY_TRC   initialisation 
    2122    
     
    4546 
    4647      IF( nn_timing == 1 )  CALL timing_start('trc_ice_ini') 
    47  
     48      ! 
     49      CALL trc_nam_ice 
    4850      ! 
    4951      trc_i(:,:,:) = 0.0d0 ! by default 
     
    5153 
    5254      IF ( nn_ice_tr == 1 ) THEN 
    53          IF( lk_pisces  )    CALL trc_ice_ini_pisces       ! PISCES  bio-model 
    54          IF( lk_cfc     )    CALL trc_ice_ini_cfc          ! CFC     tracers 
    55          IF( lk_c14b    )    CALL trc_ice_ini_c14b         ! C14 bomb  tracer 
    56          IF( lk_my_trc  )    CALL trc_ice_ini_my_trc       ! MY_TRC  tracers 
     55         IF( ln_pisces  )    CALL trc_ice_ini_pisces       ! PISCES  bio-model 
     56         IF( ll_cfc     )    CALL trc_ice_ini_cfc          ! CFC     tracers 
     57         IF( ln_c14     )    CALL trc_ice_ini_c14          ! C14     tracer 
     58         IF( ln_age     )    CALL trc_ice_ini_age          ! AGE     tracer 
     59         IF( ln_my_trc  )    CALL trc_ice_ini_my_trc       ! MY_TRC  tracers 
    5760      ENDIF 
    5861 
     
    6063      ! 
    6164   END SUBROUTINE trc_ice_ini 
     65 
     66   SUBROUTINE trc_nam_ice 
     67      !!--------------------------------------------------------------------- 
     68      !!                     ***  ROUTINE trc_nam_ice *** 
     69      !! 
     70      !! ** Purpose :   Read the namelist for the ice effect on tracers 
     71      !! 
     72      !! ** Method  : - 
     73      !! 
     74      !!--------------------------------------------------------------------- 
     75      INTEGER :: jn      ! dummy loop indices 
     76      INTEGER :: ios, ierr     ! Local integer output status for namelist read 
     77      ! 
     78      TYPE(TRC_I_NML), DIMENSION(jpmaxtrc) :: sn_tri_tracer 
     79      !! 
     80      NAMELIST/namtrc_ice/ nn_ice_tr, sn_tri_tracer 
     81      !!--------------------------------------------------------------------- 
     82      ! 
     83      IF(lwp) THEN 
     84         WRITE(numout,*) 
     85         WRITE(numout,*) 'trc_nam_ice : Read the namelist for trc_ice' 
     86         WRITE(numout,*) '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
     87      ENDIF 
     88 
     89      IF( nn_timing == 1 )  CALL timing_start('trc_nam_ice') 
     90 
     91      ! 
     92      REWIND( numnat_ref )              ! Namelist namtrc_ice in reference namelist : Passive tracer input data 
     93      READ  ( numnat_ref, namtrc_ice, IOSTAT = ios, ERR = 901) 
     94 901  IF( ios /= 0 ) CALL ctl_nam ( ios , ' namtrc_ice in reference namelist ', lwp ) 
     95 
     96      REWIND( numnat_cfg )              ! Namelist namtrc_ice in configuration namelist : Pisces external sources of nutrients 
     97      READ  ( numnat_cfg, namtrc_ice, IOSTAT = ios, ERR = 902 ) 
     98 902  IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_ice in configuration namelist', lwp ) 
     99 
     100      IF( lwp ) THEN 
     101         WRITE(numout,*) ' ' 
     102         WRITE(numout,*) ' Sea ice tracers option (nn_ice_tr) : ', nn_ice_tr 
     103         WRITE(numout,*) ' ' 
     104      ENDIF 
     105      ! 
     106      ! Assign namelist stuff 
     107      DO jn = 1, jptra 
     108         trc_ice_ratio (jn) = sn_tri_tracer(jn)%trc_ratio 
     109         trc_ice_prescr(jn) = sn_tri_tracer(jn)%trc_prescr 
     110         cn_trc_o      (jn) = sn_tri_tracer(jn)%ctrc_o 
     111      END DO 
     112 
     113      IF( nn_timing == 1 )   CALL timing_stop('trc_nam_ice') 
     114      ! 
     115   END SUBROUTINE trc_nam_ice 
    62116 
    63117#else 
     
    68122   SUBROUTINE trc_ice_ini                   ! Dummy routine    
    69123   END SUBROUTINE trc_ice_ini 
     124 
     125   SUBROUTINE trc_nam_ice 
     126   END SUBROUTINE trc_nam_ice 
     127 
    70128#endif 
    71129 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/trcini.F90

    r6701 r7403  
    2424   USE trcrst 
    2525   USE lib_mpp         ! distribued memory computing library 
    26    USE sbc_oce 
    2726   USE trcice          ! tracers in sea ice 
    28    USE trcbc,   only : trc_bc_init ! generalized Boundary Conditions 
     27   USE trcbc,   only : trc_bc_ini ! generalized Boundary Conditions 
    2928  
    3029   IMPLICIT NONE 
     
    5857      IF(lwp) WRITE(numout,*) 'trc_init : initial set up of the passive tracers' 
    5958      IF(lwp) WRITE(numout,*) '~~~~~~~' 
    60  
    61       ! 
     59      ! 
     60      CALL trc_ini_ctl   ! control  
     61      CALL trc_nam       ! read passive tracers namelists 
    6262      CALL top_alloc()   ! allocate TOP arrays 
    6363      ! 
    64       CALL trc_ini_ctl   ! control  
    65       ! 
    66       CALL trc_nam       ! read passive tracers namelists 
     64      IF(.NOT.ln_trcdta )   ln_trc_ini(:) = .FALSE. 
    6765      ! 
    6866      IF(lwp) WRITE(numout,*) 
    69       ! 
    7067      IF( ln_rsttr .AND. .NOT. lk_offline ) CALL trc_rst_cal( nit000, 'READ' )   ! calendar 
    71       ! 
    7268      IF(lwp) WRITE(numout,*) 
    7369      ! 
    7470      CALL trc_ini_sms   ! SMS 
    75       ! 
     71      CALL trc_ini_inv   ! Inventories 
    7672      CALL trc_ini_trp   ! passive tracers transport 
    77       ! 
    7873      CALL trc_ice_ini   ! Tracers in sea ice 
    7974      ! 
    80       IF( lwp )  & 
    81          &  CALL ctl_opn( numstr, 'tracer.stat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp , narea ) 
     75      IF(lwp) CALL ctl_opn( numstr, 'tracer.stat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp , narea ) 
    8276      ! 
    8377      CALL trc_ini_state  !  passive tracers initialisation : from a restart or from clim 
    84       ! 
    85       IF( nn_dttrc /= 1 )        CALL trc_sub_ini      ! Initialize variables for substepping passive tracers 
    86       ! 
    87       CALL trc_ini_inv   ! Inventories 
     78      IF( nn_dttrc /= 1 ) & 
     79      CALL trc_sub_ini    ! Initialize variables for substepping passive tracers 
    8880      ! 
    8981      IF( nn_timing == 1 )   CALL timing_stop('trc_init') 
     
    120112         cvol(:,:,jk) = e1e2t(:,:) * e3t_n(:,:,jk) * tmask(:,:,jk) 
    121113      END DO 
    122       IF( lk_degrad )   cvol(:,:,:) = cvol(:,:,:) * facvol(:,:,:)    ! degrad option: reduction by facvol 
    123114      !                                                              ! total volume of the ocean  
    124115      areatot = glob_sum( cvol(:,:,:) ) 
     
    131122      IF(lwp) THEN               ! control print 
    132123         WRITE(numout,*) 
    133          WRITE(numout,*) 
    134          WRITE(numout,*) '          *** Total number of passive tracer jptra = ', jptra 
    135          WRITE(numout,*) '          *** Total volume of ocean                = ', areatot 
    136          WRITE(numout,*) '          *** Total inital content of all tracers ' 
     124         WRITE(numout,*) '  *** Total number of passive tracer jptra = ', jptra 
     125         WRITE(numout,*) '  *** Total volume of ocean                = ', areatot 
     126         WRITE(numout,*) '  *** Total inital content of all tracers ' 
    137127         WRITE(numout,*) 
    138128         DO jn = 1, jptra 
     
    148138         CALL prt_ctl_trc( tab4d=trn, mask=tmask, clinfo=ctrcnm ) 
    149139      ENDIF 
    150 9000  FORMAT(' tracer nb : ',i2,'      name :',a10,'      initial content :',e18.10) 
     1409000  FORMAT('  tracer nb : ',i2,'      name :',a10,'      initial content :',e18.10) 
    151141      ! 
    152142   END SUBROUTINE trc_ini_inv 
     
    158148      !! ** Purpose :   SMS initialisation 
    159149      !!---------------------------------------------------------------------- 
    160       USE trcini_cfc      ! CFC      initialisation 
    161       USE trcini_pisces   ! PISCES   initialisation 
    162       USE trcini_c14b     ! C14 bomb initialisation 
    163       USE trcini_my_trc   ! MY_TRC   initialisation 
    164       !!---------------------------------------------------------------------- 
    165       IF( lk_pisces  )       CALL trc_ini_pisces       ! PISCES  bio-model 
    166       IF( lk_cfc     )       CALL trc_ini_cfc          ! CFC     tracers 
    167       IF( lk_c14b    )       CALL trc_ini_c14b         ! C14 bomb  tracer 
    168       IF( lk_my_trc  )       CALL trc_ini_my_trc       ! MY_TRC  tracers 
     150      USE trcini_pisces  ! PISCES   initialisation 
     151      USE trcini_cfc     ! CFC      initialisation 
     152      USE trcini_c14     ! C14  initialisation 
     153      USE trcini_age     ! age initialisation 
     154      USE trcini_my_trc  ! MY_TRC   initialisation 
     155      ! 
     156      INTEGER :: jn 
     157      !!---------------------------------------------------------------------- 
     158      ! 
     159      ! Pass sn_tracer fields to specialized arrays  
     160      DO jn = 1, jp_bgc 
     161         ctrcnm    (jn) = TRIM( sn_tracer(jn)%clsname ) 
     162         ctrcln    (jn) = TRIM( sn_tracer(jn)%cllname ) 
     163         ctrcun    (jn) = TRIM( sn_tracer(jn)%clunit  ) 
     164         ln_trc_ini(jn) =       sn_tracer(jn)%llinit 
     165         ln_trc_sbc(jn) =       sn_tracer(jn)%llsbc 
     166         ln_trc_cbc(jn) =       sn_tracer(jn)%llcbc 
     167         ln_trc_obc(jn) =       sn_tracer(jn)%llobc 
     168      END DO 
     169      !     
     170      IF( ln_pisces  )   CALL trc_ini_pisces     !  PISCES model 
     171      IF( ln_my_trc  )   CALL trc_ini_my_trc     !  MY_TRC model 
     172      IF( ll_cfc     )   CALL trc_ini_cfc        !  CFC's 
     173      IF( ln_c14     )   CALL trc_ini_c14        !  C14 model 
     174      IF( ln_age     )   CALL trc_ini_age        !  AGE 
     175      ! 
     176      IF(lwp) THEN                   ! control print 
     177         WRITE(numout,*) 
     178         WRITE(numout,*) ' trc_init: Summary for selected passive tracers' 
     179         WRITE(numout,*) ' ~~~~~~~~~~~~~~' 
     180         WRITE(numout,*) ' ID     NAME     INI  SBC  CBC  OBC' 
     181         DO jn = 1, jptra 
     182            WRITE(numout,9001) jn, TRIM(ctrcnm(jn)), ln_trc_ini(jn), ln_trc_sbc(jn),ln_trc_cbc(jn),ln_trc_obc(jn) 
     183         END DO 
     184      ENDIF 
     1859001  FORMAT(1x,i3,1x,a10,3x,l2,3x,l2,3x,l2,3x,l2) 
    169186      ! 
    170187   END SUBROUTINE trc_ini_sms 
     
    207224      ! 
    208225      ! Initialisation of tracers Initial Conditions 
    209       IF( ln_trcdta )      CALL trc_dta_init(jptra) 
     226      IF( ln_trcdta )      CALL trc_dta_ini(jptra) 
    210227 
    211228      ! Initialisation of tracers Boundary Conditions 
    212       IF( lk_my_trc )     CALL trc_bc_init(jptra) 
     229      IF( ln_my_trc )     CALL trc_bc_ini(jptra) 
    213230 
    214231      IF( ln_rsttr ) THEN 
     
    217234        ! 
    218235      ELSE 
    219         ! 
    220         IF( ln_trcdta .AND. nb_trcdta > 0 ) THEN  ! Initialisation of tracer from a file that may also be used for damping 
    221             ! 
     236        ! Initialisation of tracer from a file that may also be used for damping 
     237        IF( ln_trcdta .AND. nb_trcdta > 0 ) THEN 
     238            ! update passive tracers arrays with input data read from file 
    222239            DO jn = 1, jptra 
    223                IF( ln_trc_ini(jn) ) THEN      ! update passive tracers arrays with input data read from file 
     240               IF( ln_trc_ini(jn) ) THEN 
    224241                  jl = n_trc_index(jn)  
    225                   CALL trc_dta( nit000, sf_trcdta(jl), rf_trfac(jl) )   ! read tracer data at nit000 
    226                   trn(:,:,:,jn) = sf_trcdta(jl)%fnow(:,:,:)  
     242                  CALL trc_dta( nit000, sf_trcdta(jl), rf_trfac(jl), trn(:,:,:,jn) ) 
    227243                  ! 
    228                   IF( .NOT.ln_trcdmp .AND. .NOT.ln_trcdmp_clo ) THEN      !== deallocate data structure   ==! 
    229                      !                                                    (data used only for initialisation) 
     244                  ! deallocate data structure if data are not used for damping 
     245                  IF( .NOT.ln_trcdmp .AND. .NOT.ln_trcdmp_clo ) THEN 
    230246                     IF(lwp) WRITE(numout,*) 'trc_dta: deallocate data arrays as they are only used to initialize the run' 
    231                                                   DEALLOCATE( sf_trcdta(jl)%fnow )     !  arrays in the structure 
     247                                                  DEALLOCATE( sf_trcdta(jl)%fnow ) 
    232248                     IF( sf_trcdta(jl)%ln_tint )  DEALLOCATE( sf_trcdta(jl)%fdta ) 
    233249                     ! 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/trcnam.F90

    r6140 r7403  
    2020   USE oce_trc           ! shared variables between ocean and passive tracers 
    2121   USE trc               ! passive tracers common variables 
    22    USE trcnam_pisces     ! PISCES namelist 
    23    USE trcnam_cfc        ! CFC SMS namelist 
    24    USE trcnam_c14b       ! C14 SMS namelist 
    25    USE trcnam_my_trc     ! MY_TRC SMS namelist 
    2622   USE trd_oce        
    2723   USE trdtrc_oce 
     
    3430   PUBLIC trc_nam      ! called in trcini 
    3531 
     32   TYPE(PTRACER), DIMENSION(jpmaxtrc), PUBLIC  :: sn_tracer  ! type of tracer for saving if not key_iomput 
     33 
    3634   !!---------------------------------------------------------------------- 
    3735   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
     
    5250      !!--------------------------------------------------------------------- 
    5351      INTEGER  ::   jn                  ! dummy loop indice 
    54       !                                   
    55       IF( .NOT.lk_offline )   CALL trc_nam_run     ! Parameters of the run  
     52      ! 
     53      IF( .NOT.lk_offline )   CALL trc_nam_run     ! Parameters of the run                                   
    5654      !                
    57                               CALL trc_nam_trc     ! passive tracer informations 
     55      CALL trc_nam_trc     ! passive tracer informations 
    5856      !                                         
    59                               CALL trc_nam_dia     ! Parameters of additional diagnostics 
    60       !                                       
    61       ! 
    6257      IF( ln_rsttr                     )   ln_trcdta     = .FALSE.   ! restart : no need of clim data 
    6358      ! 
    6459      IF( ln_trcdmp .OR. ln_trcdmp_clo )   ln_trcdta     = .TRUE.   ! damping : need to have clim data 
    6560      ! 
    66       IF( .NOT.ln_trcdta               )   ln_trc_ini(:) = .FALSE. 
    67  
    68       IF(lwp) THEN                   ! control print 
    69          WRITE(numout,*) 
    70          WRITE(numout,*) ' Namelist : namtrc' 
    71          WRITE(numout,*) '   Read inputs data from file (y/n)             ln_trcdta     = ', ln_trcdta 
    72          WRITE(numout,*) '   Damping of passive tracer (y/n)              ln_trcdmp     = ', ln_trcdmp 
    73          WRITE(numout,*) '   Restoring of tracer on closed seas           ln_trcdmp_clo = ', ln_trcdmp_clo 
    74          WRITE(numout,*) ' ' 
    75          DO jn = 1, jptra 
    76             WRITE(numout,*) '  tracer nb : ', jn, '    short name : ', ctrcnm(jn) 
    77          END DO 
    78          WRITE(numout,*) ' ' 
    79       ENDIF 
    8061 
    8162      IF(lwp) THEN                   ! control print 
     
    9677         ENDIF 
    9778      ENDIF 
    98  
    99        
    100       rdttrc = rdt * FLOAT( nn_dttrc )   ! passive tracer time-step 
    101    
    102       IF(lwp) THEN                   ! control print 
     79      ! 
     80      rdttrc = rdt * FLOAT( nn_dttrc )          ! passive tracer time-step 
     81      !  
     82      IF(lwp) THEN                              ! control print 
    10383        WRITE(numout,*)  
    10484        WRITE(numout,*) '    Passive Tracer  time step    rdttrc  = ', rdttrc 
    10585        WRITE(numout,*)  
    10686      ENDIF 
    107  
    108  
    109 #if defined key_trdmxl_trc || defined key_trdtrc 
    110  
    111          REWIND( numnat_ref )              ! Namelist namtrc_trd in reference namelist : Passive tracer trends 
    112          READ  ( numnat_ref, namtrc_trd, IOSTAT = ios, ERR = 905) 
    113 905      IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_trd in reference namelist', lwp ) 
    114  
    115          REWIND( numnat_cfg )              ! Namelist namtrc_trd in configuration namelist : Passive tracer trends 
    116          READ  ( numnat_cfg, namtrc_trd, IOSTAT = ios, ERR = 906 ) 
    117 906      IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_trd in configuration namelist', lwp ) 
    118          IF(lwm) WRITE ( numont, namtrc_trd ) 
    119  
    120          IF(lwp) THEN 
    121             WRITE(numout,*) 
    122             WRITE(numout,*) ' trd_mxl_trc_init : read namelist namtrc_trd                    ' 
    123             WRITE(numout,*) ' ~~~~~~~~~~~~~~~~                                               ' 
    124             WRITE(numout,*) '   * frequency of trends diagnostics   nn_trd_trc             = ', nn_trd_trc 
    125             WRITE(numout,*) '   * control surface type              nn_ctls_trc            = ', nn_ctls_trc 
    126             WRITE(numout,*) '   * restart for ML diagnostics        ln_trdmxl_trc_restart  = ', ln_trdmxl_trc_restart 
    127             WRITE(numout,*) '   * flag to diagnose trends of                                 ' 
    128             WRITE(numout,*) '     instantantaneous or mean ML T/S   ln_trdmxl_trc_instant  = ', ln_trdmxl_trc_instant 
    129             WRITE(numout,*) '   * unit conversion factor            rn_ucf_trc             = ', rn_ucf_trc 
    130             DO jn = 1, jptra 
    131                IF( ln_trdtrc(jn) ) WRITE(numout,*) '    compute ML trends for tracer number :', jn 
    132             END DO 
    133          ENDIF 
    134 #endif 
    135  
    136  
    137       ! Call the ice module for tracers 
    138       ! ------------------------------- 
    139                                   CALL trc_nam_ice 
    140  
    141       ! namelist of SMS 
    142       ! ---------------       
    143       IF( lk_pisces  ) THEN   ;   CALL trc_nam_pisces      ! PISCES  bio-model 
    144       ELSE                    ;   IF(lwp) WRITE(numout,*) '          PISCES not used' 
    145       ENDIF 
    146  
    147       IF( lk_cfc     ) THEN   ;   CALL trc_nam_cfc         ! CFC     tracers 
    148       ELSE                    ;   IF(lwp) WRITE(numout,*) '          CFC not used' 
    149       ENDIF 
    150  
    151       IF( lk_c14b     ) THEN   ;   CALL trc_nam_c14b         ! C14 bomb     tracers 
    152       ELSE                    ;   IF(lwp) WRITE(numout,*) '          C14 not used' 
    153       ENDIF 
    154  
    155       IF( lk_my_trc  ) THEN   ;   CALL trc_nam_my_trc      ! MY_TRC  tracers 
    156       ELSE                    ;   IF(lwp) WRITE(numout,*) '          MY_TRC not used' 
    157       ENDIF 
     87      ! 
     88      IF( l_trdtrc )        CALL trc_nam_trd    ! Passive tracer trends 
    15889      ! 
    15990   END SUBROUTINE trc_nam 
     
    16798      !! 
    16899      !!--------------------------------------------------------------------- 
    169       NAMELIST/namtrc_run/ nn_dttrc, nn_writetrc, ln_rsttr, nn_rsttr, ln_top_euler, & 
     100      NAMELIST/namtrc_run/ nn_dttrc, ln_rsttr, nn_rsttr, ln_top_euler, & 
    170101        &                  cn_trcrst_indir, cn_trcrst_outdir, cn_trcrst_in, cn_trcrst_out 
    171102      ! 
     
    199130         WRITE(numout,*) '   control of time step for passive tracer      nn_rsttr      = ', nn_rsttr 
    200131         WRITE(numout,*) '   first time step for pass. trac.              nittrc000     = ', nittrc000 
    201          WRITE(numout,*) '   frequency of outputs for passive tracers     nn_writetrc   = ', nn_writetrc  
    202132         WRITE(numout,*) '   Use euler integration for TRC (y/n)          ln_top_euler  = ', ln_top_euler 
    203133         WRITE(numout,*) ' ' 
     
    206136    END SUBROUTINE trc_nam_run 
    207137 
    208  
    209    SUBROUTINE trc_nam_ice 
    210       !!--------------------------------------------------------------------- 
    211       !!                     ***  ROUTINE trc_nam_ice *** 
    212       !! 
    213       !! ** Purpose :   Read the namelist for the ice effect on tracers 
    214       !! 
    215       !! ** Method  : - 
    216       !! 
    217       !!--------------------------------------------------------------------- 
    218       INTEGER :: jn      ! dummy loop indices 
    219       INTEGER :: ios     ! Local integer output status for namelist read 
    220       ! 
    221       TYPE(TRC_I_NML), DIMENSION(jptra) :: sn_tri_tracer 
    222       !! 
    223       NAMELIST/namtrc_ice/ nn_ice_tr, sn_tri_tracer 
    224       !!--------------------------------------------------------------------- 
    225       ! 
    226       IF(lwp) THEN 
    227          WRITE(numout,*) 
    228          WRITE(numout,*) 'trc_nam_ice : Read the namelist for trc_ice' 
    229          WRITE(numout,*) '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
    230       ENDIF 
    231  
    232       IF( nn_timing == 1 )  CALL timing_start('trc_nam_ice') 
    233  
    234       ! 
    235       REWIND( numnat_ref )              ! Namelist namtrc_ice in reference namelist : Passive tracer input data 
    236       READ  ( numnat_ref, namtrc_ice, IOSTAT = ios, ERR = 901) 
    237  901  IF( ios /= 0 ) CALL ctl_nam ( ios , ' namtrc_ice in reference namelist ', lwp ) 
    238  
    239       REWIND( numnat_cfg )              ! Namelist namtrc_ice in configuration namelist : Pisces external sources of nutrients 
    240       READ  ( numnat_cfg, namtrc_ice, IOSTAT = ios, ERR = 902 ) 
    241  902  IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_ice in configuration namelist', lwp ) 
    242  
    243       IF( lwp ) THEN 
    244          WRITE(numout,*) ' ' 
    245          WRITE(numout,*) ' Sea ice tracers option (nn_ice_tr) : ', nn_ice_tr 
    246          WRITE(numout,*) ' ' 
    247       ENDIF 
    248  
    249       ! Assign namelist stuff 
    250       DO jn = 1, jptra 
    251          trc_ice_ratio(jn)  = sn_tri_tracer(jn)%trc_ratio 
    252          trc_ice_prescr(jn) = sn_tri_tracer(jn)%trc_prescr 
    253          cn_trc_o      (jn) = sn_tri_tracer(jn)%ctrc_o 
    254       END DO 
    255  
    256       IF( nn_timing == 1 )   CALL timing_stop('trc_nam_ice') 
    257       ! 
    258    END SUBROUTINE trc_nam_ice 
    259  
    260  
    261138   SUBROUTINE trc_nam_trc 
    262139      !!--------------------------------------------------------------------- 
     
    266143      !! 
    267144      !!--------------------------------------------------------------------- 
    268       INTEGER  ::   ios                 ! Local integer output status for namelist read 
    269       INTEGER  ::   jn                  ! dummy loop indice 
    270       ! 
    271       TYPE(PTRACER), DIMENSION(jptra) :: sn_tracer  ! type of tracer for saving if not key_iomput 
    272       !! 
    273       NAMELIST/namtrc/ sn_tracer, ln_trcdta, ln_trcdmp, ln_trcdmp_clo 
    274       !!--------------------------------------------------------------------- 
     145      INTEGER  ::   ios, ierr, icfc       ! Local integer output status for namelist read 
     146      !! 
     147      NAMELIST/namtrc/jp_bgc, ln_pisces, ln_my_trc, ln_age, ln_cfc11, ln_cfc12, ln_sf6, ln_c14, & 
     148         &            sn_tracer, ln_trcdta, ln_trcdmp, ln_trcdmp_clo, jp_dia3d, jp_dia2d 
     149      !!--------------------------------------------------------------------- 
     150      ! Dummy settings to fill tracers data structure 
     151      !                  !   name   !   title   !   unit   !   init  !   sbc   !   cbc   !   obc  ! 
     152      sn_tracer = PTRACER( 'NONAME' , 'NOTITLE' , 'NOUNIT' , .false. , .false. , .false. , .false.) 
     153      ! 
    275154      IF(lwp) WRITE(numout,*) 
    276155      IF(lwp) WRITE(numout,*) 'trc_nam_trc : read the passive tracer namelists' 
     
    286165      IF(lwm) WRITE ( numont, namtrc ) 
    287166 
    288       DO jn = 1, jptra 
    289          ctrcnm    (jn) = TRIM( sn_tracer(jn)%clsname ) 
    290          ctrcln    (jn) = TRIM( sn_tracer(jn)%cllname ) 
    291          ctrcun    (jn) = TRIM( sn_tracer(jn)%clunit  ) 
    292          ln_trc_ini(jn) =       sn_tracer(jn)%llinit 
    293 #if defined key_my_trc 
    294          ln_trc_sbc(jn) =       sn_tracer(jn)%llsbc 
    295          ln_trc_cbc(jn) =       sn_tracer(jn)%llcbc 
    296          ln_trc_obc(jn) =       sn_tracer(jn)%llobc 
    297 #endif 
    298          ln_trc_wri(jn) =       sn_tracer(jn)%llsave 
    299       END DO 
    300       ! 
     167      ! Control settings 
     168      IF( ln_pisces .AND. ln_my_trc )   CALL ctl_stop( 'Choose only ONE BGC model - PISCES or MY_TRC' ) 
     169      IF( .NOT. ln_pisces .AND. .NOT. ln_my_trc )   jp_bgc = 0 
     170      ll_cfc = ln_cfc11 .OR. ln_cfc12 .OR. ln_sf6 
     171      ! 
     172      jptra       =  0 
     173      jp_pisces   =  0    ;   jp_pcs0  =  0    ;   jp_pcs1  = 0 
     174      jp_my_trc   =  0    ;   jp_myt0  =  0    ;   jp_myt1  = 0 
     175      jp_cfc      =  0    ;   jp_cfc0  =  0    ;   jp_cfc1  = 0 
     176      jp_age      =  0    ;   jp_c14   =  0 
     177      ! 
     178      IF( ln_pisces )  THEN 
     179         jp_pisces = jp_bgc 
     180         jp_pcs0   = 1 
     181         jp_pcs1   = jp_pisces 
     182      ENDIF 
     183      IF( ln_my_trc )  THEN 
     184          jp_my_trc = jp_bgc 
     185          jp_myt0   = 1 
     186          jp_myt1   = jp_my_trc 
     187      ENDIF 
     188      ! 
     189      jptra  = jp_bgc 
     190      ! 
     191      IF( ln_age )    THEN 
     192         jptra     = jptra + 1 
     193         jp_age    = jptra 
     194      ENDIF 
     195      IF( ln_cfc11 )  jp_cfc = jp_cfc + 1 
     196      IF( ln_cfc12 )  jp_cfc = jp_cfc + 1 
     197      IF( ln_sf6   )  jp_cfc = jp_cfc + 1 
     198      IF( ll_cfc )    THEN 
     199          jptra     = jptra + jp_cfc 
     200          jp_cfc0   = jptra - jp_cfc + 1 
     201          jp_cfc1   = jptra 
     202      ENDIF 
     203      IF( ln_c14 )    THEN 
     204           jptra     = jptra + 1 
     205           jp_c14    = jptra 
     206      ENDIF 
     207      ! 
     208      IF( jptra == 0 )   CALL ctl_stop( 'All TOP tracers disabled: change namtrc setting or check if key_top is active' ) 
     209      ! 
     210      IF(lwp) THEN                   ! control print 
     211         WRITE(numout,*) 
     212         WRITE(numout,*) ' Namelist : namtrc' 
     213         WRITE(numout,*) '   Total number of passive tracers              jptra         = ', jptra 
     214         WRITE(numout,*) '   Total number of BGC tracers                  jp_bgc        = ', jp_bgc 
     215         WRITE(numout,*) '   Simulating PISCES model                      ln_pisces     = ', ln_pisces 
     216         WRITE(numout,*) '   Simulating MY_TRC  model                     ln_my_trc     = ', ln_my_trc 
     217         WRITE(numout,*) '   Simulating water mass age                    ln_age        = ', ln_age 
     218         WRITE(numout,*) '   Simulating CFC11 passive tracer              ln_cfc11      = ', ln_cfc11 
     219         WRITE(numout,*) '   Simulating CFC12 passive tracer              ln_cfc12      = ', ln_cfc12 
     220         WRITE(numout,*) '   Simulating SF6 passive tracer                ln_sf6        = ', ln_sf6 
     221         WRITE(numout,*) '   Total number of CFCs tracers                 jp_cfc        = ', jp_cfc 
     222         WRITE(numout,*) '   Simulating C14   passive tracer              ln_c14        = ', ln_c14 
     223         WRITE(numout,*) '   Read inputs data from file (y/n)             ln_trcdta     = ', ln_trcdta 
     224         WRITE(numout,*) '   Damping of passive tracer (y/n)              ln_trcdmp     = ', ln_trcdmp 
     225         WRITE(numout,*) '   Restoring of tracer on closed seas           ln_trcdmp_clo = ', ln_trcdmp_clo 
     226         WRITE(numout,*) ' ' 
     227         WRITE(numout,*) ' ' 
     228      ENDIF 
     229      ! 
     230      IF( ll_cfc .OR. ln_c14 ) THEN 
     231        !                             ! Open namelist files 
     232        CALL ctl_opn( numtrc_ref, 'namelist_trc_ref'   ,     'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 
     233        CALL ctl_opn( numtrc_cfg, 'namelist_trc_cfg'   ,     'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 
     234        IF(lwm) CALL ctl_opn( numonr, 'output.namelist.trc', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 
     235        ! 
     236      ENDIF 
     237 
    301238   END SUBROUTINE trc_nam_trc 
    302239 
    303  
    304    SUBROUTINE trc_nam_dia 
     240   SUBROUTINE trc_nam_trd 
    305241      !!--------------------------------------------------------------------- 
    306242      !!                     ***  ROUTINE trc_nam_dia  *** 
     
    312248      !!                ( (PISCES, CFC, MY_TRC ) 
    313249      !!--------------------------------------------------------------------- 
     250 
     251#if defined key_trdmxl_trc  || defined key_trdtrc 
    314252      INTEGER  ::   ios                 ! Local integer output status for namelist read 
    315253      INTEGER ::  ierr 
    316254      !! 
    317 #if defined key_trdmxl_trc  || defined key_trdtrc 
    318255      NAMELIST/namtrc_trd/ nn_trd_trc, nn_ctls_trc, rn_ucf_trc, & 
    319256         &                ln_trdmxl_trc_restart, ln_trdmxl_trc_instant, & 
    320257         &                cn_trdrst_trc_in, cn_trdrst_trc_out, ln_trdtrc 
    321 #endif 
    322       NAMELIST/namtrc_dia/ ln_diatrc, ln_diabio, nn_writedia, nn_writebio 
    323258      !!--------------------------------------------------------------------- 
    324259 
    325260      IF(lwp) WRITE(numout,*) 
    326       IF(lwp) WRITE(numout,*) 'trc_nam_dia : read the passive tracer diagnostics options' 
     261      IF(lwp) WRITE(numout,*) 'trc_nam_trd : read the passive tracer diagnostics options' 
    327262      IF(lwp) WRITE(numout,*) '~~~~~~~' 
    328263 
    329       REWIND( numnat_ref )              ! Namelist namtrc_dia in reference namelist : Passive tracer diagnostics 
    330       READ  ( numnat_ref, namtrc_dia, IOSTAT = ios, ERR = 903) 
    331 903   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_dia in reference namelist', lwp ) 
    332  
    333       REWIND( numnat_cfg )              ! Namelist namtrc_dia in configuration namelist : Passive tracer diagnostics 
    334       READ  ( numnat_cfg, namtrc_dia, IOSTAT = ios, ERR = 904 ) 
    335 904   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_dia in configuration namelist', lwp ) 
    336       IF(lwm) WRITE ( numont, namtrc_dia ) 
     264      ! 
     265      ALLOCATE( ln_trdtrc(jptra) )  
     266      ! 
     267      REWIND( numnat_ref )              ! Namelist namtrc_trd in reference namelist : Passive tracer trends 
     268      READ  ( numnat_ref, namtrc_trd, IOSTAT = ios, ERR = 905) 
     269905   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_trd in reference namelist', lwp ) 
     270 
     271      REWIND( numnat_cfg )              ! Namelist namtrc_trd in configuration namelist : Passive tracer trends 
     272      READ  ( numnat_cfg, namtrc_trd, IOSTAT = ios, ERR = 906 ) 
     273906   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_trd in configuration namelist', lwp ) 
     274      IF(lwm) WRITE ( numont, namtrc_trd ) 
    337275 
    338276      IF(lwp) THEN 
    339277         WRITE(numout,*) 
    340          WRITE(numout,*) 
    341          WRITE(numout,*) ' Namelist : namtrc_dia' 
    342          WRITE(numout,*) '    save additionnal diagnostics arrays         ln_diatrc   = ', ln_diatrc 
    343          WRITE(numout,*) '    save additionnal biology diagnostics arrays ln_diabio   = ', ln_diabio 
    344          WRITE(numout,*) '    frequency of outputs for additional arrays  nn_writedia = ', nn_writedia 
    345          WRITE(numout,*) '    frequency of outputs for biological trends  nn_writebio = ', nn_writebio 
    346          WRITE(numout,*) ' ' 
    347       ENDIF 
    348  
    349       IF( ln_diatrc .AND. .NOT. lk_iomput ) THEN  
    350          ALLOCATE( trc2d(jpi,jpj,jpdia2d), trc3d(jpi,jpj,jpk,jpdia3d),  & 
    351            &       ctrc2d(jpdia2d), ctrc2l(jpdia2d), ctrc2u(jpdia2d) ,  &  
    352            &       ctrc3d(jpdia3d), ctrc3l(jpdia3d), ctrc3u(jpdia3d) ,  STAT = ierr )  
    353          IF( ierr > 0 )   CALL ctl_stop( 'STOP', 'trcnam: unable to allocate add. diag. array' ) 
    354          ! 
    355          trc2d(:,:,:  ) = 0._wp  ;   ctrc2d(:) = ' '   ;   ctrc2l(:) = ' '    ;    ctrc2u(:) = ' '  
    356          trc3d(:,:,:,:) = 0._wp  ;   ctrc3d(:) = ' '   ;   ctrc3l(:) = ' '    ;    ctrc3u(:) = ' '  
    357          ! 
    358       ENDIF 
    359  
    360       IF( ( ln_diabio .AND. .NOT. lk_iomput ) .OR. l_trdtrc ) THEN 
    361          ALLOCATE( trbio (jpi,jpj,jpk,jpdiabio) , & 
    362            &       ctrbio(jpdiabio), ctrbil(jpdiabio), ctrbiu(jpdiabio), STAT = ierr )  
    363          IF( ierr > 0 )   CALL ctl_stop( 'STOP', 'trcnam: unable to allocate bio. diag. array' ) 
    364          ! 
    365          trbio(:,:,:,:) = 0._wp  ;   ctrbio(:) = ' '   ;   ctrbil(:) = ' '    ;    ctrbiu(:) = ' '  
    366          ! 
    367       ENDIF 
    368       ! 
    369    END SUBROUTINE trc_nam_dia 
     278         WRITE(numout,*) ' trd_mxl_trc_init : read namelist namtrc_trd                    ' 
     279         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~                                               ' 
     280         WRITE(numout,*) '   * frequency of trends diagnostics   nn_trd_trc             = ', nn_trd_trc 
     281         WRITE(numout,*) '   * control surface type              nn_ctls_trc            = ', nn_ctls_trc 
     282         WRITE(numout,*) '   * restart for ML diagnostics        ln_trdmxl_trc_restart  = ', ln_trdmxl_trc_restart 
     283         WRITE(numout,*) '   * flag to diagnose trends of                                 ' 
     284         WRITE(numout,*) '     instantantaneous or mean ML T/S   ln_trdmxl_trc_instant  = ', ln_trdmxl_trc_instant 
     285         WRITE(numout,*) '   * unit conversion factor            rn_ucf_trc             = ', rn_ucf_trc 
     286         DO jn = 1, jptra 
     287            IF( ln_trdtrc(jn) ) WRITE(numout,*) '    compute ML trends for tracer number :', jn 
     288         END DO 
     289      ENDIF 
     290#endif 
     291      ! 
     292   END SUBROUTINE trc_nam_trd 
    370293 
    371294#else 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/trcsms.F90

    r5656 r7403  
    1616   USE trc                ! 
    1717   USE trcsms_pisces      ! PISCES biogeo-model 
    18    USE trcsms_cfc         ! CFC 11 & 12 
    19    USE trcsms_c14b        ! C14b tracer  
     18   USE trcsms_cfc         ! CFC 11 &/or 12 
     19   USE trcsms_c14         ! C14  
     20   USE trcsms_age         ! AGE 
    2021   USE trcsms_my_trc      ! MY_TRC  tracers 
    2122   USE prtctl_trc         ! Print control for debbuging 
     
    4849      IF( nn_timing == 1 )   CALL timing_start('trc_sms') 
    4950      ! 
    50       IF( lk_pisces  )   CALL trc_sms_pisces ( kt )    ! main program of PISCES  
    51       IF( lk_cfc     )   CALL trc_sms_cfc    ( kt )    ! surface fluxes of CFC 
    52       IF( lk_c14b    )   CALL trc_sms_c14b   ( kt )    ! surface fluxes of C14 
    53       IF( lk_my_trc  )   CALL trc_sms_my_trc ( kt )    ! MY_TRC  tracers 
     51      IF( ln_pisces  )   CALL trc_sms_pisces ( kt )    ! main program of PISCES  
     52      IF( ll_cfc     )   CALL trc_sms_cfc    ( kt )    ! surface fluxes of CFC 
     53      IF( ln_c14     )   CALL trc_sms_c14    ( kt )    ! surface fluxes of C14 
     54      IF( ln_age     )   CALL trc_sms_age    ( kt )    ! Age tracer 
     55      IF( ln_my_trc  )   CALL trc_sms_my_trc ( kt )    ! MY_TRC  tracers 
    5456 
    5557      IF(ln_ctl) THEN      ! print mean trends (used for debugging) 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/trcstp.F90

    r6981 r7403  
    1515   USE trctrp           ! passive tracers transport 
    1616   USE trcsms           ! passive tracers sources and sinks 
    17    USE prtctl_trc       ! Print control for debbuging 
    18    USE trcdia 
    1917   USE trcwri 
    2018   USE trcrst 
    2119   USE trdtrc_oce 
    2220   USE trdmxl_trc 
     21   USE prtctl_trc       ! Print control for debbuging 
    2322   USE iom 
    2423   USE in_out_manager 
     
    6261      IF( nn_timing == 1 )   CALL timing_start('trc_stp') 
    6362      ! 
     63      IF( ( neuler == 0 .AND. kt == nittrc000 ) .OR. ln_top_euler ) THEN     ! at nittrc000 
     64         r2dttrc =  rdttrc           ! = rdttrc (use or restarting with Euler time stepping) 
     65      ELSEIF( kt <= nittrc000 + nn_dttrc ) THEN          ! at nittrc000 or nittrc000+1 
     66         r2dttrc = 2. * rdttrc       ! = 2 rdttrc (leapfrog) 
     67      ENDIF 
     68      ! 
    6469      IF( kt == nittrc000 .AND. lk_trdmxl_trc )  CALL trd_mxl_trc_init    ! trends: Mixed-layer 
    6570      ! 
     
    6873            cvol(:,:,jk) = e1e2t(:,:) * e3t_n(:,:,jk) * tmask(:,:,jk) 
    6974         END DO 
    70          IF( lk_degrad )  cvol(:,:,:) = cvol(:,:,:) * facvol(:,:,:)       ! degrad option: reduction by facvol 
    7175         areatot         = glob_sum( cvol(:,:,:) ) 
    7276      ENDIF 
     
    8791                                   CALL trc_rst_opn  ( kt )       ! Open tracer restart file  
    8892         IF( lrst_trc )            CALL trc_rst_cal  ( kt, 'WRITE' )   ! calendar 
    89          IF( lk_iomput ) THEN  ;   CALL trc_wri      ( kt )       ! output of passive tracers with iom I/O manager 
    90          ELSE                  ;   CALL trc_dia      ( kt )       ! output of passive tracers with old I/O manager 
    91          ENDIF 
     93                                   CALL trc_wri      ( kt )       ! output of passive tracers with iom I/O manager 
    9294                                   CALL trc_sms      ( kt )       ! tracers: sinks and sources 
    9395                                   CALL trc_trp      ( kt )       ! transport of passive tracers 
  • branches/2016/dev_merge_2016/NEMOGCM/NEMO/TOP_SRC/trcwri.F90

    r5836 r7403  
    1919   USE trcwri_pisces 
    2020   USE trcwri_cfc 
    21    USE trcwri_c14b 
     21   USE trcwri_c14 
     22   USE trcwri_age 
    2223   USE trcwri_my_trc 
    2324 
     
    5354      ! write the tracer concentrations in the file 
    5455      ! --------------------------------------- 
    55       IF( lk_pisces  )   CALL trc_wri_pisces     ! PISCES  
    56       IF( lk_cfc     )   CALL trc_wri_cfc        ! surface fluxes of CFC 
    57       IF( lk_c14b    )   CALL trc_wri_c14b       ! surface fluxes of C14 
    58       IF( lk_my_trc  )   CALL trc_wri_my_trc     ! MY_TRC  tracers 
     56      IF( ln_pisces  )   CALL trc_wri_pisces     ! PISCES  
     57      IF( ll_cfc     )   CALL trc_wri_cfc        ! surface fluxes of CFC 
     58      IF( ln_c14     )   CALL trc_wri_c14        ! surface fluxes of C14 
     59      IF( ln_age     )   CALL trc_wri_age        ! AGE tracer 
     60      IF( ln_my_trc  )   CALL trc_wri_my_trc     ! MY_TRC  tracers 
    5961      ! 
    6062      IF( nn_timing == 1 )  CALL timing_stop('trc_wri') 
  • branches/2016/dev_merge_2016/NEMOGCM/SETTE/sette.sh

    r6460 r7403  
    306306#   set_namelist namelist_cfg nn_solv 2 
    307307    set_namelist namelist_top_cfg ln_trcdta .false. 
    308     set_namelist namelist_top_cfg ln_diatrc .false. 
    309308    # put ln_ironsed, ln_river, ln_ndepo, ln_dust to false 
    310309    # if not you need input files, and for tests is not necessary 
     
    316315    set_namelist namelist_pisces_cfg ln_ndepo .false. 
    317316    set_namelist namelist_pisces_cfg ln_ironsed .false. 
     317    set_namelist namelist_pisces_cfg ln_ironice .false. 
    318318    set_namelist namelist_pisces_cfg ln_hydrofe .false. 
    319319    if [ ${USING_MPMD} == "yes" ] ; then 
     
    341341    set_namelist namelist_cfg jpnij 8 
    342342#   set_namelist namelist_cfg nn_solv 2 
    343     set_namelist namelist_top_cfg ln_diatrc .false. 
    344343    set_namelist namelist_top_cfg ln_rsttr .true. 
    345344    set_namelist namelist_top_cfg nn_rsttr 2 
     
    356355    set_namelist namelist_pisces_cfg ln_ndepo .false. 
    357356    set_namelist namelist_pisces_cfg ln_ironsed .false. 
     357    set_namelist namelist_pisces_cfg ln_ironice .false. 
    358358    set_namelist namelist_pisces_cfg ln_hydrofe .false. 
    359359    # put ln_pisdmp to false : no restoring to global mean value 
     
    400400#   set_namelist namelist_cfg nn_solv 2 
    401401    set_namelist namelist_top_cfg ln_trcdta .false. 
    402     set_namelist namelist_top_cfg ln_diatrc .false. 
    403402    # put ln_ironsed, ln_river, ln_ndepo, ln_dust to false 
    404403    # if not you need input files, and for tests is not necessary 
     
    410409    set_namelist namelist_pisces_cfg ln_ndepo .false. 
    411410    set_namelist namelist_pisces_cfg ln_ironsed .false. 
     411    set_namelist namelist_pisces_cfg ln_ironice .false. 
    412412    set_namelist namelist_pisces_cfg ln_hydrofe .false. 
    413413    # put ln_pisdmp to false : no restoring to global mean value 
     
    439439#   set_namelist namelist_cfg nn_solv 2 
    440440    set_namelist namelist_top_cfg ln_trcdta .false. 
    441     set_namelist namelist_top_cfg ln_diatrc .false. 
    442441    # put ln_ironsed, ln_river, ln_ndepo, ln_dust to false 
    443442    # if not you need input files, and for tests is not necessary 
     
    449448    set_namelist namelist_pisces_cfg ln_ndepo .false. 
    450449    set_namelist namelist_pisces_cfg ln_ironsed .false. 
     450    set_namelist namelist_pisces_cfg ln_ironice .false. 
    451451    set_namelist namelist_pisces_cfg ln_hydrofe .false. 
    452452    # put ln_pisdmp to false : no restoring to global mean value 
     
    486486    set_namelist namelist_cfg jpnij 8 
    487487    set_namelist namelist_top_cfg ln_trcdta .false. 
    488     set_namelist namelist_top_cfg ln_diatrc .false. 
    489488    # put ln_ironsed, ln_river, ln_ndepo, ln_dust to false 
    490489    # if not you need input files, and for tests is not necessary 
     
    496495    set_namelist namelist_pisces_cfg ln_ndepo .false. 
    497496    set_namelist namelist_pisces_cfg ln_ironsed .false. 
     497    set_namelist namelist_pisces_cfg ln_ironice .false. 
    498498    set_namelist namelist_pisces_cfg ln_hydrofe .false. 
    499499    # put ln_pisdmp to false : no restoring to global mean value 
     
    519519    set_namelist namelist_cfg jpnj 4 
    520520    set_namelist namelist_cfg jpnij 8 
    521     set_namelist namelist_top_cfg ln_diatrc .false. 
    522521    set_namelist namelist_top_cfg ln_rsttr .true. 
    523522    set_namelist namelist_top_cfg nn_rsttr 2 
     
    537536    set_namelist namelist_pisces_cfg ln_ndepo .false. 
    538537    set_namelist namelist_pisces_cfg ln_ironsed .false. 
     538    set_namelist namelist_pisces_cfg ln_ironice .false. 
    539539    set_namelist namelist_pisces_cfg ln_hydrofe .false. 
    540540    # put ln_pisdmp to false : no restoring to global mean value 
     
    572572    set_namelist namelist_cfg jpnij 16 
    573573    set_namelist namelist_top_cfg ln_trcdta .false. 
    574     set_namelist namelist_top_cfg ln_diatrc .false. 
    575574    # put ln_ironsed, ln_river, ln_ndepo, ln_dust to false 
    576575    # if not you need input files, and for tests is not necessary 
     
    582581    set_namelist namelist_pisces_cfg ln_ndepo .false. 
    583582    set_namelist namelist_pisces_cfg ln_ironsed .false. 
     583    set_namelist namelist_pisces_cfg ln_ironice .false. 
    584584    set_namelist namelist_pisces_cfg ln_hydrofe .false. 
    585585    # put ln_pisdmp to false : no restoring to global mean value 
     
    610610    set_namelist namelist_cfg jpnij 16 
    611611    set_namelist namelist_top_cfg ln_trcdta .false. 
    612     set_namelist namelist_top_cfg ln_diatrc .false. 
    613612    # put ln_ironsed, ln_river, ln_ndepo, ln_dust to false 
    614613    # if not you need input files, and for tests is not necessary 
     
    620619    set_namelist namelist_pisces_cfg ln_ndepo .false. 
    621620    set_namelist namelist_pisces_cfg ln_ironsed .false. 
     621    set_namelist namelist_pisces_cfg ln_ironice .false. 
    622622    set_namelist namelist_pisces_cfg ln_hydrofe .false. 
    623623    # put ln_pisdmp to false : no restoring to global mean value 
Note: See TracChangeset for help on using the changeset viewer.