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 10115 for NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC – NEMO

Ignore:
Timestamp:
2018-09-12T15:59:13+02:00 (6 years ago)
Author:
cbricaud
Message:

phase 3.6 coarsening branch with nemo_3.6_rev9192

Location:
NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC
Files:
31 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/AGE/par_age.F90

    r7491 r10115  
    2525   USE par_c14b   , ONLY : jp_c14b_trd     !: number of tracers in C14 
    2626 
     27   USE par_my_trc , ONLY : jp_my_trc       !: number of tracers in MY_TRC 
     28   USE par_my_trc , ONLY : jp_my_trc_2d    !: number of 2D diag in MY_TRC 
     29   USE par_my_trc , ONLY : jp_my_trc_3d    !: number of 3D diag in MY_TRC 
     30   USE par_my_trc , ONLY : jp_my_trc_trd   !: number of biological diag in MY_TRC 
     31 
    2732   IMPLICIT NONE 
    2833 
    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 !: 
     34   INTEGER, PARAMETER ::   jp_lm      =  jp_pisces     + jp_my_trc     + jp_cfc     + jp_c14b     !:  
     35   INTEGER, PARAMETER ::   jp_lm_2d   =  jp_pisces_2d  + jp_my_trc_2d  + jp_cfc_2d  + jp_c14b_2d  !: 
     36   INTEGER, PARAMETER ::   jp_lm_3d   =  jp_pisces_3d  + jp_my_trc_3d  + jp_cfc_3d  + jp_c14b_3d  !: 
     37   INTEGER, PARAMETER ::   jp_lm_trd  =  jp_pisces_trd + jp_my_trc_trd + jp_cfc_trd + jp_c14b_trd !: 
    3338 
    3439#if defined key_age 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/AGE/trcnam_age.F90

    r7491 r10115  
    1414   USE oce_trc         ! Ocean variables 
    1515   USE trcsms_age      ! AGE specific variable 
     16   USE trc 
    1617 
    1718   IMPLICIT NONE 
     
    4445      NAMELIST/namage/ rn_age_depth, rn_age_kill_rate  
    4546      !!---------------------------------------------------------------------- 
     47      ! Variable setting 
     48      ctrcnm    (jp_age0) = 'Age' 
     49      ctrcln    (jp_age0) = 'Sea water age since surface contact' 
     50      ctrcun    (jp_age0) = 'year' 
     51      ln_trc_ini(jp_age0) = .false. 
    4652      !                             ! Open namelist files 
    4753      CALL ctl_opn( numnatg_ref, 'namelist_age_ref'   ,     'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/AGE/trcwri_age.F90

    r7491 r10115  
    3333      INTEGER              :: jn 
    3434      !!--------------------------------------------------------------------- 
    35  
     35      IF( ln_crs_top ) CALL iom_swap( "nemo_crs" ) 
    3636  
    3737      ! write the tracer concentrations in the file 
     
    3939      DO jn = jp_age0, jp_age1 
    4040         cltra = TRIM( ctrcnm(jn) )                  ! short title for tracer 
     41         IF(lwp)WRITE(numout,*)"WRITE ",TRIM(cltra) 
    4142         CALL iom_put( TRIM(cltra), trn(:,:,:,jn) ) 
    4243      END DO 
    4344      ! 
     45      IF( ln_crs_top ) CALL iom_swap( "nemo" ) 
    4446      ! 
    4547   END SUBROUTINE trc_wri_age 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/C14b/par_c14b.F90

    r3680 r10115  
    1111   USE par_pisces , ONLY : jp_pisces_trd   !: number of biological diag in PISCES 
    1212 
     13   USE par_my_trc , ONLY : jp_my_trc       !: number of tracers in MY_TRC 
     14   USE par_my_trc , ONLY : jp_my_trc_2d    !: number of 2D diag in MY_TRC 
     15   USE par_my_trc , ONLY : jp_my_trc_3d    !: number of 3D diag in MY_TRC 
     16   USE par_my_trc , ONLY : jp_my_trc_trd   !: number of biological diag in MY_TRC 
     17 
    1318   USE par_cfc    , ONLY : jp_cfc          !: number of tracers in CFC 
    1419   USE par_cfc    , ONLY : jp_cfc_2d       !: number of 2D diag in CFC 
     
    1924   IMPLICIT NONE 
    2025 
    21    INTEGER, PARAMETER ::   jp_lb      =  jp_pisces     + jp_cfc     !: cum. number of pass. tracers 
    22    INTEGER, PARAMETER ::   jp_lb_2d   =  jp_pisces_2d  + jp_cfc_2d  !: 
    23    INTEGER, PARAMETER ::   jp_lb_3d   =  jp_pisces_3d  + jp_cfc_3d  !: 
    24    INTEGER, PARAMETER ::   jp_lb_trd  =  jp_pisces_trd + jp_cfc_trd !: 
     26   INTEGER, PARAMETER ::   jp_lb      =  jp_pisces     + jp_my_trc     + jp_cfc     !: cum. number of pass. tracers 
     27   INTEGER, PARAMETER ::   jp_lb_2d   =  jp_pisces_2d  + jp_my_trc_2d  + jp_cfc_2d  !: 
     28   INTEGER, PARAMETER ::   jp_lb_3d   =  jp_pisces_3d  + jp_my_trc_3d  + jp_cfc_3d  !: 
     29   INTEGER, PARAMETER ::   jp_lb_trd  =  jp_pisces_trd + jp_my_trc_trd + jp_cfc_trd !: 
    2530    
    2631#if defined key_c14b 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/C14b/trcnam_c14b.F90

    r4624 r10115  
    5555      NAMELIST/namc14dia/  c14dia2d, c14dia3d     ! additional diagnostics 
    5656      !!------------------------------------------------------------------- 
     57      ctrcnm    (jp_c14b0) = 'C14B' 
     58      ctrcln    (jp_c14b0) = 'Bomb C14 Concentration' 
     59      ctrcun    (jp_c14b0) = 'ration' 
     60      ln_trc_ini(jp_c14b0) = .false. 
     61      ln_trc_wri(jp_c14b0) = .true. 
    5762      !                             ! Open namelist file 
    5863      CALL ctl_opn( numnatb_ref, 'namelist_c14b_ref'  ,     'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/C14b/trcsms_c14b.F90

    r5602 r10115  
    291291      !     
    292292      IF( lk_iomput ) THEN 
    293         CALL iom_put( "qtrC14b"  , qtr_c14  ) 
    294         CALL iom_put( "qintC14b" , qint_c14 ) 
     293        CALL iom_put( "qtr_C14b"  , qtr_c14  ) 
     294        CALL iom_put( "qint_C14b" , qint_c14 ) 
    295295        CALL iom_put( "fdecay"   , zdecay   ) 
    296296      ELSE 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/CFC/par_cfc.F90

    r3680 r10115  
    1414   USE par_pisces , ONLY : jp_pisces_3d    !: number of 3D diag in PISCES 
    1515   USE par_pisces , ONLY : jp_pisces_trd   !: number of biological diag in PISCES 
     16    
     17   USE par_my_trc , ONLY : jp_my_trc       !: number of tracers in MY_TRC 
     18   USE par_my_trc , ONLY : jp_my_trc_2d    !: number of 2D diag in MY_TRC 
     19   USE par_my_trc , ONLY : jp_my_trc_3d    !: number of 3D diag in MY_TRC 
     20   USE par_my_trc , ONLY : jp_my_trc_trd   !: number of biological diag in MY_TRC 
    1621 
    1722   IMPLICIT NONE 
    1823 
    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 !: 
     24   INTEGER, PARAMETER ::   jp_lc      =  jp_pisces     + jp_my_trc     !: cumulative number of passive tracers 
     25   INTEGER, PARAMETER ::   jp_lc_2d   =  jp_pisces_2d  + jp_my_trc_2d  !: 
     26   INTEGER, PARAMETER ::   jp_lc_3d   =  jp_pisces_3d  + jp_my_trc_3d  !: 
     27   INTEGER, PARAMETER ::   jp_lc_trd  =  jp_pisces_trd + jp_my_trc_trd !: 
    2328    
    2429#if defined key_cfc 
     
    2732   !!--------------------------------------------------------------------- 
    2833   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') 
     34   INTEGER, PUBLIC, PARAMETER ::   jp_cfc     =  2          !: number of passive tracers 
     35   INTEGER, PUBLIC, PARAMETER ::   jp_cfc_2d  =  2 * jp_cfc !: additional 2d output arrays ('key_trc_diaadd') 
    3136   INTEGER, PUBLIC, PARAMETER ::   jp_cfc_3d  =  0          !: additional 3d output arrays ('key_trc_diaadd') 
    3237   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    
     38   ! Enable trace gases according to total number jp_cfc 
     39   LOGICAL, PUBLIC, PARAMETER ::   lp_cfc11   = .false.     !: use CFC11 
     40   LOGICAL, PUBLIC, PARAMETER ::   lp_cfc12   = .true.      !: use CFC12 
     41   LOGICAL, PUBLIC, PARAMETER ::   lp_sf6     = .true.      !: use SF6 
    3742#else 
    3843   !!--------------------------------------------------------------------- 
     
    4449   INTEGER, PUBLIC, PARAMETER ::   jp_cfc_3d  =  0          !: No CFC additional 3d output arrays  
    4550   INTEGER, PUBLIC, PARAMETER ::   jp_cfc_trd =  0          !: number of sms trends for CFC 
     51   LOGICAL, PUBLIC, PARAMETER ::   lp_cfc11   = .false.     !: use CFC11 
     52   LOGICAL, PUBLIC, PARAMETER ::   lp_cfc12   = .false.     !: use CFC12 
     53   LOGICAL, PUBLIC, PARAMETER ::   lp_sf6     = .false.     !: use SF6 
    4654#endif 
    4755 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/CFC/trcini_cfc.F90

    r3294 r10115  
    2222   PUBLIC   trc_ini_cfc   ! called by trcini.F90 module 
    2323 
    24    CHARACTER (len=34) ::   clname = 'cfc1112.atm'   ! ??? 
    25  
    2624   INTEGER  ::   inum                   ! unit number 
    2725   REAL(wp) ::   ylats = -10.           ! 10 degrees south 
     
    4644      INTEGER  ::  iskip = 6   ! number of 1st descriptor lines 
    4745      REAL(wp) ::  zyy, zyd 
     46      CHARACTER(len = 20)  ::  cltra 
    4847      !!---------------------------------------------------------------------- 
    4948 
     
    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 concentrations from formatted file : ' // TRIM(clnamecfc) 
    5654       
    57       CALL ctl_opn( inum, clname, 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 
     55      CALL ctl_opn( inum, clnamecfc, 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 
    5856      REWIND(inum) 
    5957       
     
    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        
    121110      IF(lwp) THEN        ! Control print 
    122111         WRITE(numout,*) 
    123          WRITE(numout,*) ' Year   p11HN    p11HS    p12HN    p12HS ' 
     112         WRITE(numout,*) ' Year   c11NH     c11SH     c12NH     c12SH     SF6NH     SF6SH' 
    124113         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) 
     114            WRITE(numout, '( 1I4, 6F10.4)') jn, p_cfc(jn,1:2,1), p_cfc(jn,1:2,2), p_cfc(jn,1:2,3) 
    126115         END DO 
    127116      ENDIF 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/CFC/trcnam_cfc.F90

    r4624 r10115  
    4646      INTEGER ::  numonc      = -1   ! Logical unit for output namelist 
    4747      INTEGER :: ios                 ! Local integer output status for namelist read 
    48       INTEGER :: jl, jn 
     48      INTEGER :: jl, jn, cnt 
    4949      TYPE(DIAG), DIMENSION(jp_cfc_2d) :: cfcdia2d 
    5050      !! 
    51       NAMELIST/namcfcdate/ ndate_beg, nyear_res 
     51      NAMELIST/namcfcdate/ ndate_beg, nyear_res, clnamecfc 
    5252      NAMELIST/namcfcdia/  cfcdia2d     ! additional diagnostics 
    5353      !!---------------------------------------------------------------------- 
     
    6666      IF(lwm) WRITE ( numonc, namcfcdate ) 
    6767 
     68      jn = jp_cfc0 - 1 
     69      ! Variables setting 
     70      IF( lp_cfc11 ) THEN 
     71         jn = jn + 1 
     72         ctrcnm    (jn) = 'CFC11' 
     73         ctrcln    (jn) = 'Chlorofluoro carbon 11 Concentration' 
     74         ctrcun    (jn) = 'umolC/L' 
     75         ln_trc_ini(jn) = .false. 
     76         ln_trc_wri(jn) = .true. 
     77      ENDIF 
     78      ! 
     79      IF( lp_cfc12 ) THEN 
     80         jn = jn + 1 
     81         ctrcnm    (jn) = 'CFC12' 
     82         ctrcln    (jn) = 'Chlorofluoro carbon 12 Concentration' 
     83         ctrcun    (jn) = 'umolC/L' 
     84         ln_trc_ini(jn) = .false. 
     85         ln_trc_wri(jn) = .true. 
     86      ENDIF 
     87      ! 
     88      IF( lp_sf6 ) THEN 
     89         jn = jn + 1 
     90         ctrcnm    (jn) = 'SF6' 
     91         ctrcln    (jn) = 'Sulfur hexafluoride Concentration' 
     92         ctrcun    (jn) = 'umol/L' 
     93         ln_trc_ini(jn) = .false. 
     94         ln_trc_wri(jn) = .true. 
     95      ENDIF 
     96 
    6897      IF(lwp) THEN                  ! control print 
    69          WRITE(numout,*) 
     98         WRITE(numout,*) ' ' 
     99         WRITE(numout,*) ' CFCs' 
     100         WRITE(numout,*) ' ' 
    70101         WRITE(numout,*) ' trc_nam: Read namdates, namelist for CFC chemical model' 
    71102         WRITE(numout,*) ' ~~~~~~~' 
    72103         WRITE(numout,*) '    initial calendar date (aammjj) for CFC  ndate_beg = ', ndate_beg 
    73104         WRITE(numout,*) '    restoring time constant (year)          nyear_res = ', nyear_res 
     105         WRITE(numout,*) '    Atmospheric CFC concentrations file     clnamecfc = ', TRIM(clnamecfc) 
     106         WRITE(numout,*) '    Compute dynamics for CFC-11             lp_cfc11  = ', lp_cfc11 
     107         WRITE(numout,*) '    Compute dynamics for CFC-12             lp_cfc12  = ', lp_cfc12 
     108         WRITE(numout,*) '    Compute dynamics for SF6                lp_sf6    = ', lp_sf6 
    74109      ENDIF 
    75110      nyear_beg = ndate_beg / 10000 
    76111      IF(lwp) WRITE(numout,*) '    initial year (aa)                       nyear_beg = ', nyear_beg 
     112      ! 
     113      ! check consistency between CFC namelist and par_cfc setting 
     114      if ( jn - jp_cfc0 + 1 .ne. jp_cfc )  & 
     115      CALL ctl_stop( 'trc_nam_cfc: Number of selected CFCs is different from total CFC number (jp_cfc) specified in par_cfc.F90' ) 
    77116      ! 
    78117 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/CFC/trcsms_cfc.F90

    r4996 r10115  
    2929 
    3030   INTEGER , PUBLIC, PARAMETER ::   jphem  =   2   ! parameter for the 2 hemispheres 
    31    INTEGER , PUBLIC            ::   jpyear         ! Number of years read in CFC1112 file 
     31   INTEGER , PUBLIC            ::   jpyear         ! Number of years read in input data file (in trcini_cfc) 
    3232   INTEGER , PUBLIC            ::   ndate_beg      ! initial calendar date (aammjj) for CFC 
    3333   INTEGER , PUBLIC            ::   nyear_res      ! restoring time constant (year) 
    3434   INTEGER , PUBLIC            ::   nyear_beg      ! initial year (aa)  
     35   CHARACTER(len=200), PUBLIC  ::   clnamecfc      ! Input filename of CFCs atm. concentrations 
    3536    
    3637   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   p_cfc    ! partial hemispheric pressure for CFC 
     
    3839   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qtr_cfc  ! flux at surface 
    3940   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qint_cfc ! cumulative flux  
     41   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   atm_cfc  ! partial hemispheric pressure for used CFC 
    4042   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   patm     ! atmospheric function 
    4143 
    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 
    45        
     44   REAL(wp),         ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   soa      ! coefficient for solubility of CFC [mol/l/atm] 
     45   REAL(wp),         ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   sob      !    "               " 
     46   REAL(wp),         ALLOCATABLE, SAVE, DIMENSION(:,:)   ::   sca      ! coefficients for schmidt number in degrees Celsius 
    4647   !                          ! coefficients for conversion 
    4748   REAL(wp) ::   xconv1 = 1.0          ! conversion from to  
     
    8283      INTEGER  ::   im1, im2, ierr 
    8384      REAL(wp) ::   ztap, zdtap         
    84       REAL(wp) ::   zt1, zt2, zt3, zv2 
     85      REAL(wp) ::   zt1, zt2, zt3, zt4, zv2 
    8586      REAL(wp) ::   zsol      ! solubility 
    8687      REAL(wp) ::   zsch      ! schmidt number  
     
    9394      ! 
    9495      IF( nn_timing == 1 )  CALL timing_start('trc_sms_cfc') 
     96 
     97      IF(lwp) WRITE(numout,*) 
     98      IF(lwp) WRITE(numout,*) ' trc_sms_cfc:  CFC model' 
     99      IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 
    95100      ! 
    96101      ALLOCATE( zpatm(jphem,jp_cfc), STAT=ierr ) 
     
    112117         im2       =      nmonth - 7 
    113118      ENDIF 
     119      ! Avoid bad interpolation if starting date is =< 1900 
     120      if( iyear_beg .LE. 0 ) iyear_beg = 1 
     121      ! 
    114122      iyear_end = iyear_beg + 1 
    115  
    116123      !                                                  !------------! 
    117124      DO jl = 1, jp_cfc                                  !  CFC loop  ! 
     
    120127         ! time interpolation at time kt 
    121128         DO jm = 1, jphem 
    122             zpatm(jm,jl) = (  p_cfc(iyear_beg, jm, jl) * FLOAT (im1)  & 
    123                &           +  p_cfc(iyear_end, jm, jl) * FLOAT (im2) ) / 12. 
     129            zpatm(jm,jl) = (  atm_cfc(iyear_beg, jm, jl) * REAL(im1, wp)  & 
     130               &           +  atm_cfc(iyear_end, jm, jl) * REAL(im2, wp) ) / 12. 
    124131         END DO 
    125132          
     
    148155   
    149156               ! Computation of speed transfert 
    150                !    Schmidt number 
     157               !    Schmidt number revised in Wanninkhof (2014) 
    151158               zt1  = tsn(ji,jj,1,jp_tem) 
    152159               zt2  = zt1 * zt1  
    153160               zt3  = zt1 * zt2 
    154                zsch = sca(1,jl) + sca(2,jl) * zt1 + sca(3,jl) * zt2 + sca(4,jl) * zt3 
    155  
    156                !    speed transfert : formulae of wanninkhof 1992 
     161               zt4  = zt2 * zt2 
     162               zsch = sca(1,jl) + sca(2,jl) * zt1 + sca(3,jl) * zt2 + sca(4,jl) * zt3 + sca(5,jl) * zt4 
     163 
     164               !    speed transfert : formulae revised in Wanninkhof (2014) 
    157165               zv2     = wndm(ji,jj) * wndm(ji,jj) 
    158166               zsch    = zsch / 660. 
    159                zak_cfc = ( 0.39 * xconv2 * zv2 / SQRT(zsch) ) * tmask(ji,jj,1) 
     167               zak_cfc = ( 0.31 * xconv2 * zv2 / SQRT(zsch) ) * tmask(ji,jj,1) 
    160168 
    161169               ! Input function  : speed *( conc. at equil - concen at surface ) 
     
    188196      ! 
    189197      IF( lk_iomput ) THEN 
    190          CALL iom_put( "qtrCFC11"  , qtr_cfc (:,:,1) ) 
    191          CALL iom_put( "qintCFC11" , qint_cfc(:,:,1) ) 
     198         jl = 0 
     199         DO jn = jp_cfc0, jp_cfc1 
     200            jl = jl + 1 
     201            CALL iom_put( 'qtr_'//TRIM(ctrcnm(jn)) , qtr_cfc (:,:,jl) ) 
     202            CALL iom_put( 'qint_'//TRIM(ctrcnm(jn)), qint_cfc(:,:,jl) ) 
     203         ENDDO 
    192204      ELSE 
    193205         IF( ln_diatrc ) THEN 
    194             trc2d(:,:,jp_cfc0_2d    ) = qtr_cfc (:,:,1) 
    195             trc2d(:,:,jp_cfc0_2d + 1) = qint_cfc(:,:,1) 
     206            jl = 0 
     207            DO jn = jp_cfc0_2d, jp_cfc1_2d, 2 
     208               jl = jl + 1 
     209               trc2d(:,:,jn    ) = qtr_cfc (:,:,jl) 
     210               trc2d(:,:,jn + 1) = qint_cfc(:,:,jl) 
     211            ENDDO 
    196212         END IF 
    197213      END IF 
     
    215231      !!--------------------------------------------------------------------- 
    216232      INTEGER :: jn 
    217  
     233      !!---------------------------------------------------------------------- 
     234      ! 
     235      jn = 0  
    218236      ! coefficient for CFC11  
    219237      !---------------------- 
    220  
    221       ! Solubility 
    222       soa(1,1) = -229.9261  
    223       soa(2,1) =  319.6552 
    224       soa(3,1) =  119.4471 
    225       soa(4,1) =  -1.39165 
    226  
    227       sob(1,1) =  -0.142382 
    228       sob(2,1) =   0.091459 
    229       sob(3,1) =  -0.0157274 
    230  
    231       ! Schmidt number  
    232       sca(1,1) = 3501.8 
    233       sca(2,1) = -210.31 
    234       sca(3,1) =  6.1851 
    235       sca(4,1) = -0.07513 
     238      if ( lp_cfc11 ) then 
     239         jn = jn + 1 
     240         ! Solubility 
     241         soa(1,jn) = -229.9261  
     242         soa(2,jn) =  319.6552 
     243         soa(3,jn) =  119.4471 
     244         soa(4,jn) =  -1.39165 
     245 
     246         sob(1,jn) =  -0.142382 
     247         sob(2,jn) =   0.091459 
     248         sob(3,jn) =  -0.0157274 
     249 
     250         ! Schmidt number  
     251         sca(1,jn) = 3579.2 
     252         sca(2,jn) = -222.63 
     253         sca(3,jn) = 7.5749 
     254         sca(4,jn) = -0.14595 
     255         sca(5,jn) = 0.0011874 
     256 
     257         ! atm. concentration 
     258         atm_cfc(:,:,jn) = p_cfc(:,:,1) 
     259      endif 
    236260 
    237261      ! coefficient for CFC12  
    238262      !---------------------- 
    239  
    240       ! Solubility 
    241       soa(1,2) = -218.0971 
    242       soa(2,2) =  298.9702 
    243       soa(3,2) =  113.8049 
    244       soa(4,2) =  -1.39165 
    245  
    246       sob(1,2) =  -0.143566 
    247       sob(2,2) =   0.091015 
    248       sob(3,2) =  -0.0153924 
    249  
    250       ! schmidt number  
    251       sca(1,2) =  3845.4  
    252       sca(2,2) =  -228.95 
    253       sca(3,2) =  6.1908  
    254       sca(4,2) =  -0.067430 
     263      if ( lp_cfc12 ) then 
     264         jn = jn + 1 
     265         ! Solubility 
     266         soa(1,jn) = -218.0971 
     267         soa(2,jn) =  298.9702 
     268         soa(3,jn) =  113.8049 
     269         soa(4,jn) =  -1.39165 
     270 
     271         sob(1,jn) =  -0.143566 
     272         sob(2,jn) =   0.091015 
     273         sob(3,jn) =  -0.0153924 
     274 
     275         ! schmidt number  
     276         sca(1,jn) = 3828.1 
     277         sca(2,jn) = -249.86 
     278         sca(3,jn) = 8.7603 
     279         sca(4,jn) = -0.1716 
     280         sca(5,jn) = 0.001408 
     281 
     282         ! atm. concentration 
     283         atm_cfc(:,:,jn) = p_cfc(:,:,2) 
     284      endif 
     285 
     286      ! coefficient for SF6 
     287      !---------------------- 
     288      if ( lp_sf6 ) then 
     289         jn = jn + 1 
     290         ! Solubility 
     291         soa(1,jn) = -80.0343 
     292         soa(2,jn) = 117.232 
     293         soa(3,jn) =  29.5817 
     294         soa(4,jn) =   0.0 
     295 
     296         sob(1,jn) =  0.0335183  
     297         sob(2,jn) = -0.0373942  
     298         sob(3,jn) =  0.00774862 
     299 
     300         ! schmidt number 
     301         sca(1,jn) = 3177.5 
     302         sca(2,jn) = -200.57 
     303         sca(3,jn) = 6.8865 
     304         sca(4,jn) = -0.13335 
     305         sca(5,jn) = 0.0010877 
     306   
     307         ! atm. concentration 
     308         atm_cfc(:,:,jn) = p_cfc(:,:,3) 
     309       endif 
    255310 
    256311      IF( ln_rsttr ) THEN 
     
    272327      !!                     ***  ROUTINE trc_sms_cfc_alloc  *** 
    273328      !!---------------------------------------------------------------------- 
    274       ALLOCATE( xphem   (jpi,jpj)        ,     & 
    275          &      qtr_cfc (jpi,jpj,jp_cfc) ,     & 
    276          &      qint_cfc(jpi,jpj,jp_cfc) , STAT=trc_sms_cfc_alloc ) 
     329      ALLOCATE( xphem   (jpi,jpj)        , atm_cfc(jpyear,jphem,jp_cfc)  ,    & 
     330         &      qtr_cfc (jpi,jpj,jp_cfc) , qint_cfc(jpi,jpj,jp_cfc)      ,    & 
     331         &      soa(4,jp_cfc)    ,  sob(3,jp_cfc)   ,  sca(5,jp_cfc)     ,    & 
     332         &      STAT=trc_sms_cfc_alloc ) 
    277333         ! 
    278334      IF( trc_sms_cfc_alloc /= 0 ) CALL ctl_warn('trc_sms_cfc_alloc : failed to allocate arrays.') 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/MY_TRC/par_my_trc.F90

    r7806 r10115  
    1515   USE par_pisces , ONLY : jp_pisces_trd   !: number of biological diag in PISCES 
    1616 
    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 
    26  
    27    USE par_age   , ONLY : jp_age         !: number of tracers in AGE 
    28    USE par_age   , ONLY : jp_age_2d      !: number of tracers in AGE 
    29    USE par_age   , ONLY : jp_age_3d      !: number of tracers in AGE 
    30    USE par_age   , ONLY : jp_age_trd     !: number of tracers in AGE 
    31  
    3217   IMPLICIT NONE 
    3318 
    34    INTEGER, PARAMETER ::   jp_lm      =  jp_pisces     + jp_cfc     + jp_c14b     + jp_age      !:  
    35    INTEGER, PARAMETER ::   jp_lm_2d   =  jp_pisces_2d  + jp_cfc_2d  + jp_c14b_2d  + jp_age_2d   !: 
    36    INTEGER, PARAMETER ::   jp_lm_3d   =  jp_pisces_3d  + jp_cfc_3d  + jp_c14b_3d  + jp_age_3d   !: 
    37    INTEGER, PARAMETER ::   jp_lm_trd  =  jp_pisces_trd + jp_cfc_trd + jp_c14b_trd + jp_age_trd  !: 
     19   INTEGER, PARAMETER ::   jp_lm      =  jp_pisces     !:  
     20   INTEGER, PARAMETER ::   jp_lm_2d   =  jp_pisces_2d  !: 
     21   INTEGER, PARAMETER ::   jp_lm_3d   =  jp_pisces_3d  !: 
     22   INTEGER, PARAMETER ::   jp_lm_trd  =  jp_pisces_trd !: 
    3823 
    3924#if defined key_my_trc 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/MY_TRC/trcnam_my_trc.F90

    r3680 r10115  
    3636      !! 
    3737      !!---------------------------------------------------------------------- 
     38      INTEGER :: jn 
    3839      ! 
    3940      IF(lwp) WRITE(numout,*) 
    4041      IF(lwp) WRITE(numout,*) ' trc_nam_my_trc : read MY_TRC namelists' 
    4142      IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~~' 
     43      !  
     44      do jn = jp_myt0 , jp_myt1 
     45         ctrcnm    (jn) = 'NONAME' 
     46         ctrcln    (jn) = 'NO Long Name' 
     47         ctrcun    (jn) = 'NOUNIT' 
     48         ln_trc_ini(jn) = .false. 
     49         ln_trc_wri(jn) = .true. 
     50      enddo 
    4251      ! 
    43    END SUBROUTINE trc_nam_my_trc 
     52      END SUBROUTINE trc_nam_my_trc 
    4453    
    4554#else 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlim.F90

    r7398 r10115  
    190190            DO ji = 1, jpi 
    191191               ! denitrification factor computed from O2 levels 
    192                nitrfac(ji,jj,jk) = MAX(  0.e0, 0.4 * ( 6.e-6  - trb(ji,jj,jk,jpoxy) )    & 
     192               nitrfac(ji,jj,jk)  = MAX(  0.e0, 0.4 * ( 6.e-6  - trb(ji,jj,jk,jpoxy) )    & 
    193193                  &                                / ( oxymin + trb(ji,jj,jk,jpoxy) )  ) 
    194                nitrfac(ji,jj,jk) = MIN( 1., nitrfac(ji,jj,jk) ) 
     194               nitrfac(ji,jj,jk)  = MIN( 1., nitrfac(ji,jj,jk) ) 
     195               ! 
     196               ! denitrification factor computed from NO3 levels 
     197               nitrfac2(ji,jj,jk) = MAX( 0.e0, ( 1.E-6 - trb(ji,jj,jk,jpno3) )  & 
     198                  &                               / ( 1.E-6 + trb(ji,jj,jk,jpno3) ) ) 
     199               nitrfac2(ji,jj,jk) = MIN( 1., nitrfac2(ji,jj,jk) ) 
    195200            END DO 
    196201         END DO 
     
    264269      ! 
    265270      nitrfac (:,:,:) = 0._wp 
     271      nitrfac2(:,:,:) = 0._wp 
    266272      ! 
    267273   END SUBROUTINE p4z_lim_init 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90

    r7806 r10115  
    131131 
    132132      IF( lk_iomput .AND. knt == nrdttrc ) THEN 
    133          IF( iom_use( "PH"     ) ) CALL iom_put( "PH"    , -1. * LOG10( hi(:,:,:) )          * tmask(:,:,:) ) 
     133         IF( iom_use( "PH"     ) ) CALL iom_put( "PH"    , -1. * LOG10( MAX( rtrn, hi(:,:,:) ) )  * tmask(:,:,:) ) 
    134134         IF( iom_use( "CO3"    ) ) CALL iom_put( "CO3"   , zco3(:,:,:)    * 1.e+3            * tmask(:,:,:) ) 
    135135         IF( iom_use( "CO3sat" ) ) CALL iom_put( "CO3sat", zco3sat(:,:,:) * 1.e+3            * tmask(:,:,:) ) 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmeso.F90

    r7398 r10115  
    111111               !  no real reason except that it seems to be more stable and may mimic predation 
    112112               !  --------------------------------------------------------------- 
    113                ztortz2   = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) 
     113               ztortz2   = mzrat2 * 1.e6 * zfact * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk) ) 
    114114               ! 
    115115               zcompadi  = MAX( ( trb(ji,jj,jk,jpdia) - xthresh2dia ), 0.e0 ) 
     
    126126               zdenom    = zfoodlim / ( xkgraz2 + zfoodlim ) 
    127127               zdenom2   = zdenom / ( zfood + rtrn ) 
    128                zgraze2   = grazrat2 * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes)  
     128               zgraze2   = grazrat2 * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpmes) * (1. - nitrfac(ji,jj,jk) )   
     129  
    129130 
    130131               zgrazd    = zgraze2  * xprefc   * zcompadi  * zdenom2  
     
    142143# if ! defined key_kriest 
    143144               zgrazffeg = grazflux  * zstep * wsbio4(ji,jj,jk)      & 
    144                &           * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) 
     145               &           * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpgoc) * trb(ji,jj,jk,jpmes) & 
     146               &           * (1. - nitrfac(ji,jj,jk)) 
    145147               zgrazfffg = zgrazffeg * trb(ji,jj,jk,jpbfe) / (trb(ji,jj,jk,jpgoc) + rtrn) 
    146148# endif 
    147149               zgrazffep = grazflux  * zstep *  wsbio3(ji,jj,jk)     & 
    148                &           * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpmes) 
     150               &           * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jppoc) * trb(ji,jj,jk,jpmes) & 
     151               &           * (1. - nitrfac(ji,jj,jk)) 
    149152               zgrazfffp = zgrazffep * trb(ji,jj,jk,jpsfe) / (trb(ji,jj,jk,jppoc) + rtrn) 
    150153              ! 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zmicro.F90

    r7398 r10115  
    103103               !  no real reason except that it seems to be more stable and may mimic predation. 
    104104               !  --------------------------------------------------------------- 
    105                ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) 
     105               ztortz = mzrat * 1.e6 * zfact * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk)) 
    106106 
    107107               zcompadi  = MIN( MAX( ( trb(ji,jj,jk,jpdia) - xthreshdia ), 0.e0 ), xsizedia ) 
     
    115115               zdenom    = zfoodlim / ( xkgraz + zfoodlim ) 
    116116               zdenom2   = zdenom / ( zfood + rtrn ) 
    117                zgraze    = grazrat * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo)  
     117               zgraze    = grazrat * zstep * tgfunc2(ji,jj,jk) * trb(ji,jj,jk,jpzoo) * (1. - nitrfac(ji,jj,jk))  
    118118 
    119119               zgrazp    = zgraze  * xpref2p * zcompaph  * zdenom2  
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zopt.F90

    r7520 r10115  
    3636 
    3737   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_par      ! structure of input par 
    38    INTEGER , PARAMETER :: nbtimes = 365  !: maximum number of times record in a file 
     38   INTEGER , PARAMETER :: nbtimes = 366  !: maximum number of times record in a file 
    3939   INTEGER  :: ntimes_par                ! number of time steps in a file 
    4040   REAL(wp), ALLOCATABLE, SAVE,   DIMENSION(:,:) :: par_varsw    !: PAR fraction of shortwave 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zrem.F90

    r7398 r10115  
    6767      ! 
    6868      INTEGER  ::   ji, jj, jk 
    69       REAL(wp) ::   zremip, zremik, zsiremin  
     69      REAL(wp) ::   zremip, zremik, zsiremin, zammonic  
    7070      REAL(wp) ::   zsatur, zsatur2, znusil, znusil2, zdep, zdepmin, zfactdep 
    7171      REAL(wp) ::   zbactfer, zorem, zorem2, zofer, zolimit 
     
    7878      REAL(wp), POINTER, DIMENSION(:,:  ) :: ztempbac 
    7979      REAL(wp), POINTER, DIMENSION(:,:,:) :: zdepbac, zolimi, zdepprod, zw3d 
     80      REAL(wp), POINTER, DIMENSION(:,:,:) :: zoxyrem 
    8081      !!--------------------------------------------------------------------- 
    8182      ! 
     
    8485      ! Allocate temporary workspace 
    8586      CALL wrk_alloc( jpi, jpj,      ztempbac                  ) 
    86       CALL wrk_alloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi ) 
     87      CALL wrk_alloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi, zoxyrem ) 
    8788 
    8889      ! Initialisation of temprary arrys 
     
    129130               ! Ammonification in suboxic waters with denitrification 
    130131               ! ------------------------------------------------------- 
    131                denitr(ji,jj,jk)  = MIN(  ( trb(ji,jj,jk,jpno3) - rtrn ) / rdenit,   & 
    132                   &                     zremik * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc)  ) 
     132               zammonic = zremik * nitrfac(ji,jj,jk) * trb(ji,jj,jk,jpdoc) 
     133               denitr(ji,jj,jk)  = zammonic * ( 1. - nitrfac2(ji,jj,jk) ) 
     134               zoxyrem(ji,jj,jk) = zammonic *        nitrfac2(ji,jj,jk) 
    133135               ! 
    134136               zolimi (ji,jj,jk) = MAX( 0.e0, zolimi (ji,jj,jk) ) 
    135137               denitr (ji,jj,jk) = MAX( 0.e0, denitr (ji,jj,jk) ) 
     138               zoxyrem(ji,jj,jk) = MAX( 0.e0, zoxyrem(ji,jj,jk) ) 
    136139               ! 
    137140            END DO 
     
    157160               tra(ji,jj,jk,jpno3) = tra(ji,jj,jk,jpno3) + zonitr - rdenita * denitnh4(ji,jj,jk) 
    158161               tra(ji,jj,jk,jpoxy) = tra(ji,jj,jk,jpoxy) - o2nit * zonitr 
    159                tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2 * rno3 * zonitr + rno3 * ( rdenita - 1. ) * denitnh4(ji,jj,jk) 
     162               tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) - 2 * rno3 * zonitr & 
     163                  &                + rno3 * ( rdenita - 1. ) * denitnh4(ji,jj,jk) 
    160164            END DO 
    161165         END DO 
     
    291295 
    292296      DO jk = 1, jpkm1 
    293          tra(:,:,jk,jppo4) = tra(:,:,jk,jppo4) + zolimi (:,:,jk) + denitr(:,:,jk) 
    294          tra(:,:,jk,jpnh4) = tra(:,:,jk,jpnh4) + zolimi (:,:,jk) + denitr(:,:,jk) 
     297         tra(:,:,jk,jppo4) = tra(:,:,jk,jppo4) + zolimi (:,:,jk) + denitr(:,:,jk) + zoxyrem(:,:,jk) 
     298         tra(:,:,jk,jpnh4) = tra(:,:,jk,jpnh4) + zolimi (:,:,jk) + denitr(:,:,jk) + zoxyrem(:,:,jk) 
    295299         tra(:,:,jk,jpno3) = tra(:,:,jk,jpno3) - denitr (:,:,jk) * rdenit 
    296          tra(:,:,jk,jpdoc) = tra(:,:,jk,jpdoc) - zolimi (:,:,jk) - denitr(:,:,jk) 
     300         tra(:,:,jk,jpdoc) = tra(:,:,jk,jpdoc) - zolimi (:,:,jk) - denitr(:,:,jk) - zoxyrem(:,:,jk) 
    297301         tra(:,:,jk,jpoxy) = tra(:,:,jk,jpoxy) - zolimi (:,:,jk) * o2ut 
    298          tra(:,:,jk,jpdic) = tra(:,:,jk,jpdic) + zolimi (:,:,jk) + denitr(:,:,jk) 
    299          tra(:,:,jk,jptal) = tra(:,:,jk,jptal) + rno3 * ( zolimi(:,:,jk) + ( rdenit + 1.) * denitr(:,:,jk) ) 
     302         tra(:,:,jk,jpdic) = tra(:,:,jk,jpdic) + zolimi (:,:,jk) + denitr(:,:,jk) + zoxyrem(:,:,jk) 
     303         tra(:,:,jk,jptal) = tra(:,:,jk,jptal) + rno3 * ( zolimi(:,:,jk) + zoxyrem(:,:,jk) & 
     304              &                                        + ( rdenit + 1.) * denitr(:,:,jk) ) 
    300305      END DO 
    301306 
     
    323328      ! 
    324329      CALL wrk_dealloc( jpi, jpj,      ztempbac                  ) 
    325       CALL wrk_dealloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi ) 
     330      CALL wrk_dealloc( jpi, jpj, jpk, zdepbac, zdepprod, zolimi, zoxyrem ) 
    326331      ! 
    327332      IF( nn_timing == 1 )  CALL timing_stop('p4z_rem') 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsed.F90

    r7520 r10115  
    6464      REAL(wp) ::  zwflux, zfminus, zfplus 
    6565      REAL(wp) ::  zlim, zfact, zfactcal 
    66       REAL(wp) ::  zo2, zno3, zflx, zpdenit, z1pdenit, zdenitt, zolimit 
     66      REAL(wp) ::  zo2, zno3, zflx, zpdenit, z1pdenit, zolimit 
    6767      REAL(wp) ::  zsiloss, zcaloss, zws3, zws4, zwsc, zdep, zwstpoc 
    6868      REAL(wp) ::  ztrfer, ztrpo4, zwdust, zlight 
     
    323323            tra(ji,jj,ikt,jptal) =  tra(ji,jj,ikt,jptal) + zcaloss * zrivalk * 2.0 
    324324            tra(ji,jj,ikt,jpdic) =  tra(ji,jj,ikt,jpdic) + zcaloss * zrivalk 
    325             zsedcal(ji,jj) = (1.0 - zrivalk) * zcaloss / zdep 
    326             zsedsi (ji,jj) = (1.0 - zrivsil) * zsiloss / zdep 
     325            zsedcal(ji,jj) = (1.0 - zrivalk) * zcaloss * fse3t(ji,jj,ikt)  
     326            zsedsi (ji,jj) = (1.0 - zrivsil) * zsiloss * fse3t(ji,jj,ikt)  
    327327#endif 
    328328         END DO 
     
    354354 
    355355#if ! defined key_sed 
    356             ! The 0.5 factor in zpdenit and zdenitt is to avoid negative NO3 concentration after both denitrification 
    357             ! in the sediments and just above the sediments. Not very clever, but simpliest option. 
    358             zpdenit  = MIN( 0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, zdenit2d(ji,jj) * zwstpoc * zrivno3 ) 
     356            ! The 0.5 factor in zpdenit is to avoid negative NO3 concentration after 
     357            ! denitrification in the sediments. Not very clever, but simpliest option. 
     358            zpdenit  = MIN( 0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, & 
     359                            zdenit2d(ji,jj) * zwstpoc * zrivno3 * (1. - nitrfac2(ji,jj,ikt) ) ) 
    359360            z1pdenit = zwstpoc * zrivno3 - zpdenit 
    360361            zolimit = MIN( ( trb(ji,jj,ikt,jpoxy) - rtrn ) / o2ut, z1pdenit * ( 1.- nitrfac(ji,jj,ikt) ) ) 
    361             zdenitt = MIN(  0.5 * ( trb(ji,jj,ikt,jpno3) - rtrn ) / rdenit, z1pdenit * nitrfac(ji,jj,ikt) ) 
    362             tra(ji,jj,ikt,jpdoc) = tra(ji,jj,ikt,jpdoc) + z1pdenit - zolimit - zdenitt 
    363             tra(ji,jj,ikt,jppo4) = tra(ji,jj,ikt,jppo4) + zpdenit + zolimit + zdenitt 
    364             tra(ji,jj,ikt,jpnh4) = tra(ji,jj,ikt,jpnh4) + zpdenit + zolimit + zdenitt 
    365             tra(ji,jj,ikt,jpno3) = tra(ji,jj,ikt,jpno3) - rdenit * (zpdenit + zdenitt) 
     362            tra(ji,jj,ikt,jpdoc) = tra(ji,jj,ikt,jpdoc) + z1pdenit - zolimit 
     363            tra(ji,jj,ikt,jppo4) = tra(ji,jj,ikt,jppo4) + zpdenit + zolimit 
     364            tra(ji,jj,ikt,jpnh4) = tra(ji,jj,ikt,jpnh4) + zpdenit + zolimit 
     365            tra(ji,jj,ikt,jpno3) = tra(ji,jj,ikt,jpno3) - rdenit * zpdenit 
    366366            tra(ji,jj,ikt,jpoxy) = tra(ji,jj,ikt,jpoxy) - zolimit * o2ut 
    367             tra(ji,jj,ikt,jptal) = tra(ji,jj,ikt,jptal) + rno3 * (zolimit + (1.+rdenit) * (zpdenit + zdenitt) ) 
    368             tra(ji,jj,ikt,jpdic) = tra(ji,jj,ikt,jpdic) + zpdenit + zolimit + zdenitt 
    369             sdenit(ji,jj) = rdenit * zpdenit / zdep 
    370             zsedc(ji,jj)   = (1. - zrivno3) * zwstpoc / zdep 
     367            tra(ji,jj,ikt,jptal) = tra(ji,jj,ikt,jptal) + rno3 * (zolimit + (1.+rdenit) * zpdenit ) 
     368            tra(ji,jj,ikt,jpdic) = tra(ji,jj,ikt,jpdic) + zpdenit + zolimit 
     369            sdenit(ji,jj) = rdenit * zpdenit * fse3t(ji,jj,ikt)  
     370            zsedc(ji,jj)   = (1. - zrivno3) * zwstpoc * fse3t(ji,jj,ikt)  
    371371#endif 
    372372         END DO 
     
    415415      IF( lk_iomput ) THEN 
    416416         IF( knt == nrdttrc ) THEN 
    417             zfact = 1.e+3 * rfact2r * rno3  !  conversion from molC/l/kt  to molN/m3/s 
    418             IF( iom_use("Nfix"   ) ) CALL iom_put( "Nfix", nitrpot(:,:,:) * nitrfix * zfact * tmask(:,:,:) )  ! nitrogen fixation  
     417            zfact = 1.e+3 * rfact2r  !  conversion from molC/l/kt  to molC/m3/s 
     418            IF( iom_use("Nfix"   ) ) CALL iom_put( "Nfix", nitrpot(:,:,:) * nitrfix * rno3 * zfact * tmask(:,:,:) )  ! nitrogen fixation  
    419419            IF( iom_use("INTNFIX") ) THEN   ! nitrogen fixation rate in ocean ( vertically integrated ) 
    420420               zwork1(:,:) = 0. 
    421421               DO jk = 1, jpkm1 
    422                  zwork1(:,:) = zwork1(:,:) + nitrpot(:,:,jk) * nitrfix * zfact * fse3t(:,:,jk) * tmask(:,:,jk) 
     422                 zwork1(:,:) = zwork1(:,:) + nitrpot(:,:,jk) * nitrfix * rno3 * zfact * fse3t(:,:,jk) * tmask(:,:,jk) 
    423423               ENDDO 
    424424               CALL iom_put( "INTNFIX" , zwork1 )  
    425425            ENDIF 
    426             IF( iom_use("SedCal" ) ) CALL iom_put( "SedCal", zsedcal(:,:) * 1.e+3 ) 
    427             IF( iom_use("SedSi" ) )  CALL iom_put( "SedSi",  zsedsi (:,:) * 1.e+3 ) 
    428             IF( iom_use("SedC" ) )   CALL iom_put( "SedC",   zsedc  (:,:) * 1.e+3 ) 
    429             IF( iom_use("Sdenit" ) ) CALL iom_put( "Sdenit", sdenit (:,:) * 1.e+3 * rno3 ) 
     426            IF( iom_use("SedCal" ) ) CALL iom_put( "SedCal", zsedcal(:,:) * zfact ) 
     427            IF( iom_use("SedSi" ) )  CALL iom_put( "SedSi",  zsedsi (:,:) * zfact ) 
     428            IF( iom_use("SedC" ) )   CALL iom_put( "SedC",   zsedc  (:,:) * zfact ) 
     429            IF( iom_use("Sdenit" ) ) CALL iom_put( "Sdenit", sdenit (:,:) * rno3 * zfact ) 
    430430         ENDIF 
    431431      ELSE 
    432          IF( ln_diatrc )  & 
    433             &  trc2d(:,:,jp_pcs0_2d + 12) = nitrpot(:,:,1) * nitrfix * rno3 * 1.e+3 * rfact2r * fse3t(:,:,1) * tmask(:,:,1) 
     432         IF( ln_diatrc ) THEN  
     433            zfact = 1.e+3 * rfact2r  !  conversion from molC/l/kt  to molC/m3/s 
     434            trc2d(:,:,jp_pcs0_2d + 12) = nitrpot(:,:,1) * nitrfix * rno3 * zfact * fse3t(:,:,1) * tmask(:,:,1) 
     435         ENDIF 
    434436      ENDIF 
    435437      ! 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zsms.F90

    r7806 r10115  
    450450 
    451451      IF( kt == nittrc000 ) THEN  
     452         xfact1 = rfact2r * 12. / 1.e15 * ryyss    ! conversion molC/kt --> PgC/yr 
     453         xfact2 = 1.e+3 * rno3 * 14. / 1.e12 * ryyss   ! conversion molC/l/s ----> TgN/m3/yr 
     454         xfact3 = 1.e+3 * rfact2r * rno3   ! conversion molC/l/kt ----> molN/m3/s 
    452455         IF( ln_check_mass .AND. lwp) THEN      !   Open budget file of NO3, ALK, Si, Fer 
    453456            CALL ctl_opn( numco2, 'carbon.budget'  , 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 
    454457            CALL ctl_opn( numnut, 'nutrient.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 
    455458            CALL ctl_opn( numnit, 'nitrogen.budget', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, 6, .FALSE., narea ) 
    456             xfact1 = rfact2r * 12. / 1.e15 * ryyss    ! conversion molC/kt --> PgC/yr 
    457             xfact2 = 1.e+3 * rno3 * 14. / 1.e12 * ryyss   ! conversion molC/l/s ----> TgN/m3/yr 
    458             xfact3 = 1.e+3 * rfact2r * rno3   ! conversion molC/l/kt ----> molN/m3/s 
    459459            cltxt='time-step   Alkalinity        Nitrate        Phosphorus         Silicate           Iron' 
    460460            IF( lwp ) WRITE(numnut,*)  TRIM(cltxt) 
     
    529529      IF( iom_use( "tnfix" ) .OR.  ( ln_check_mass .AND. kt == nitend )  ) THEN 
    530530         znitrpottot  = glob_sum ( nitrpot(:,:,:) * nitrfix * cvol(:,:,:) ) 
    531          CALL iom_put( "tnfix"  , znitrpottot * 1.e+3 * rno3 )  ! Global  nitrogen fixation molC/l  to molN/m3  
     531         CALL iom_put( "tnfix"  , znitrpottot * xfact3 )  ! Global  nitrogen fixation molC/l  to molN/m3  
    532532      ENDIF 
    533533      ! 
    534534      IF( iom_use( "tdenit" ) .OR.  ( ln_check_mass .AND. kt == nitend )  ) THEN 
    535          zrdenittot   = glob_sum ( denitr(:,:,:) * rdenit * xnegtr(:,:,:) * cvol(:,:,:) ) 
    536          CALL iom_put( "tdenit"  , zrdenittot * 1.e+3 * rno3 )  ! Total denitrification molC/l to molN/m3  
    537       ENDIF 
    538       ! 
    539       IF( iom_use( "Sdenit" ) .OR.  ( ln_check_mass .AND. kt == nitend )  ) THEN 
    540          zsdenittot   = glob_sum ( sdenit(:,:) * e1e2t(:,:) ) 
    541          CALL iom_put( "Sdenit", sdenit(:,:) * xfact3 * tmask(:,:,1) )  ! Nitrate reduction in the sediments 
     535         zrdenittot = glob_sum ( denitr(:,:,:) * rdenit * xnegtr(:,:,:) * cvol(:,:,:) ) ! denitrification in the water column 
     536         zsdenittot = glob_sum ( sdenit(:,:) * e1e2t(:,:) * tmask(:,:,1) )              ! denitrification in the sediments 
     537         CALL iom_put( "tdenit"  , ( zrdenittot + zsdenittot ) * xfact3 )               ! Total denitrification in molN/m3  
    542538      ENDIF 
    543539 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/PISCES/sms_pisces.F90

    r7806 r10115  
    8787   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xfracal    !: ?? 
    8888   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   nitrfac    !: ?? 
     89   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   nitrfac2   !: ?? 
    8990   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xlimbac    !: ?? 
    9091   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   xlimbacl   !: ?? 
     
    147148      ALLOCATE( xfracal (jpi,jpj,jpk), nitrfac(jpi,jpj,jpk),       & 
    148149         &      xlimbac (jpi,jpj,jpk), xdiss  (jpi,jpj,jpk),       &  
    149          &      xlimbacl(jpi,jpj,jpk), prodcal(jpi,jpj,jpk),     STAT=ierr(3) ) 
     150         &      xlimbacl(jpi,jpj,jpk), prodcal(jpi,jpj,jpk),       & 
     151         &      nitrfac2(jpi,jpj,jpk),                           STAT=ierr(3) ) 
    150152 
    151153      !* Variable for chemistry of the CO2 cycle 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/TRP/trcnxt.F90

    r8754 r10115  
    4949 
    5050   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) ::   r2dt 
    51  
     51   REAL(wp)  ::  rfact1, rfact2 
     52 
     53   !! * Substitutions 
     54#  include "domzgr_substitute.h90" 
     55#  include "vectopt_loop_substitute.h90" 
    5256   !!---------------------------------------------------------------------- 
    5357   !! NEMO/TOP 3.3 , NEMO Consortium (2010) 
     
    145149         !                                               
    146150      ELSE 
    147          ! Leap-Frog + Asselin filter time stepping 
    148          IF( lk_vvl ) THEN    
    149  
    150             IF( ln_crs_top )THEN  
    151                CALL tra_nxt_vvl_crs( kt, nittrc000, rdttrc, 'TRC', trb, trn, tra,      & 
    152               &                                              sbc_trc, sbc_trc_b, jptra )      ! variable volume level (vvl)  
    153             ELSE 
    154                CALL tra_nxt_vvl( kt, nittrc000, rdttrc, 'TRC', trb, trn, tra,      & 
    155               &                                          sbc_trc, sbc_trc_b, jptra )      ! variable volume level (vvl)  
     151         IF( .NOT. lk_offline ) THEN ! Leap-Frog + Asselin filter time stepping 
     152 
     153            IF( lk_vvl ) THEN    
     154               IF( ln_crs_top )THEN  
     155                  CALL tra_nxt_vvl_crs( kt, nittrc000, rdttrc, 'TRC', trb, trn, tra,      & 
     156                 &                                              sbc_trc, sbc_trc_b, jptra )      ! variable volume level (vvl)  
     157               ELSE 
     158                  CALL tra_nxt_vvl( kt, nittrc000, rdttrc, 'TRC', trb, trn, tra,      & 
     159                 &                                          sbc_trc, sbc_trc_b, jptra )      ! variable volume level (vvl)  
     160               ENDIF 
     161            ELSE                    
     162               CALL tra_nxt_fix( kt, nittrc000,         'TRC', trb, trn, tra, jptra )      ! fixed    volume level  
    156163            ENDIF 
    157          ELSE                   ;   CALL tra_nxt_fix( kt, nittrc000,         'TRC', trb, trn, tra, jptra )      ! fixed    volume level  
     164 
     165         ELSE 
     166                                    CALL trc_nxt_off( kt )       ! offline 
    158167         ENDIF 
     168 
     169 
    159170      ENDIF 
    160171 
     
    181192   END SUBROUTINE trc_nxt 
    182193 
     194   SUBROUTINE trc_nxt_off( kt ) 
     195      !!---------------------------------------------------------------------- 
     196      !!                   ***  ROUTINE tra_nxt_vvl  *** 
     197      !! 
     198      !! ** Purpose :   Time varying volume: apply the Asselin time filter   
     199      !!                and swap the tracer fields. 
     200      !!  
     201      !! ** Method  : - Apply a thickness weighted Asselin time filter on now fields. 
     202      !!              - save in (ta,sa) a thickness weighted average over the three  
     203      !!             time levels which will be used to compute rdn and thus the semi- 
     204      !!             implicit hydrostatic pressure gradient (ln_dynhpg_imp = T) 
     205      !!              - swap tracer fields to prepare the next time_step. 
     206      !!                This can be summurized for tempearture as: 
     207      !!             ztm = ( e3t_n*tn + rbcp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] )   ln_dynhpg_imp = T 
     208      !!                  /( e3t_n    + rbcp*[ e3t_b    - 2 e3t_n    + e3t_a    ] )    
     209      !!             ztm = 0                                                       otherwise 
     210      !!             tb  = ( e3t_n*tn + atfp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] ) 
     211      !!                  /( e3t_n    + atfp*[ e3t_b    - 2 e3t_n    + e3t_a    ] ) 
     212      !!             tn  = ta  
     213      !!             ta  = zt        (NB: reset to 0 after eos_bn2 call) 
     214      !! 
     215      !! ** Action  : - (tb,sb) and (tn,sn) ready for the next time step 
     216      !!              - (ta,sa) time averaged (t,s)   (ln_dynhpg_imp = T) 
     217      !!---------------------------------------------------------------------- 
     218      INTEGER         , INTENT(in   )                               ::  kt       ! ocean time-step index 
     219      !!      
     220      INTEGER  ::   ji, jj, jk, jn              ! dummy loop indices 
     221      REAL(wp) ::   ztc_a , ztc_n , ztc_b , ztc_f , ztc_d    ! local scalar 
     222      REAL(wp) ::   ze3t_b, ze3t_n, ze3t_a, ze3t_f, ze3t_d   !   -      - 
     223      !!---------------------------------------------------------------------- 
     224      ! 
     225      IF( kt == nittrc000 )  THEN 
     226         IF(lwp) WRITE(numout,*) 
     227         IF(lwp) WRITE(numout,*) 'trc_nxt_off : time stepping' 
     228         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
     229         IF( lk_vvl ) THEN 
     230           rfact1 = atfp * rdttrc(1) 
     231           rfact2 = rfact1 / rau0 
     232         ENDIF 
     233      ENDIF 
     234      ! 
     235      DO jn = 1, jptra 
     236         DO jk = 1, jpkm1 
     237            DO jj = 1, jpj 
     238               DO ji = 1, jpi 
     239                  ze3t_b = fse3t_b(ji,jj,jk) 
     240                  ze3t_n = fse3t_n(ji,jj,jk) 
     241                  ze3t_a = fse3t_a(ji,jj,jk) 
     242                  !                                         ! tracer content at Before, now and after 
     243                  ztc_b  = trb(ji,jj,jk,jn) * ze3t_b 
     244                  ztc_n  = trn(ji,jj,jk,jn) * ze3t_n 
     245                  ztc_a  = tra(ji,jj,jk,jn) * ze3t_a 
     246                  ! 
     247                  ze3t_d = ze3t_a - 2. * ze3t_n + ze3t_b 
     248                  ztc_d  = ztc_a  - 2. * ztc_n  + ztc_b 
     249                  ! 
     250                  ze3t_f = ze3t_n + atfp * ze3t_d 
     251                  ztc_f  = ztc_n  + atfp * ztc_d 
     252                  ! 
     253                  IF( lk_vvl .AND. jk == mikt(ji,jj) ) THEN           ! first level  
     254                     ze3t_f = ze3t_f - rfact2 * ( emp_b(ji,jj)      - emp(ji,jj)   ) 
     255                     ztc_f  = ztc_f  - rfact1 * ( sbc_trc(ji,jj,jn) - sbc_trc_b(ji,jj,jn) ) 
     256                  ENDIF 
     257 
     258                  ze3t_f = 1.e0 / ze3t_f 
     259                  trb(ji,jj,jk,jn) = ztc_f * ze3t_f       ! ptb <-- ptn filtered 
     260                  trn(ji,jj,jk,jn) = tra(ji,jj,jk,jn)     ! ptn <-- pta 
     261                  ! 
     262               END DO 
     263            END DO 
     264         END DO 
     265         !  
     266      END DO 
     267      ! 
     268   END SUBROUTINE trc_nxt_off 
     269 
    183270#else 
    184271   !!---------------------------------------------------------------------- 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/TRP/trcrad.F90

    r7806 r10115  
    2222   PRIVATE 
    2323 
    24    PUBLIC trc_rad         ! routine called by trcstp.F90 
     24   PUBLIC trc_rad, trc_rad_sms        ! routine called by trcstp.F90 
    2525 
    2626   !! * Substitutions 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/oce_trc.F90

    r10106 r10115  
    1212   USE dom_oce    , ONLY : gdepw_1d 
    1313   USE dom_oce    , ONLY : rdttra 
     14   USE dom_oce    , ONLY : atfp 
    1415   USE dom_oce    , ONLY : Agrif_Root      => Agrif_Root 
    1516   USE sbc_oce    , ONLY : nn_ice_embd 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/trcbc.F90

    r5602 r10115  
    277277      ! OPEN boundary conditions: DOES NOT WORK. Waiting for stable BDY 
    278278      IF( nb_trcobc > 0 ) THEN 
    279         if (lwp) write(numout,'(a,i5,a,i5)') '   reading OBC data for ', nb_trcobc ,' variables at step ', kt 
     279        if (lwp) write(numout,'(a,i5,a,i12)') '   reading OBC data for ', nb_trcobc ,' variables at step ', kt 
    280280        CALL fld_read(kt,1,sf_trcobc) 
    281281        ! vertical interpolation on s-grid and partial step to be added 
     
    284284      ! SURFACE boundary conditions        
    285285      IF( nb_trcsbc > 0 ) THEN 
    286         if (lwp) write(numout,'(a,i5,a,i5)') '   reading SBC data for ', nb_trcsbc ,' variables at step ', kt 
     286        if (lwp) write(numout,'(a,i5,a,i12)') '   reading SBC data for ', nb_trcsbc ,' variables at step ', kt 
    287287        CALL fld_read(kt,1,sf_trcsbc) 
    288288      ENDIF 
     
    290290      ! COASTAL boundary conditions        
    291291      IF( nb_trccbc > 0 ) THEN 
    292         if (lwp) write(numout,'(a,i5,a,i5)') '   reading CBC data for ', nb_trccbc ,' variables at step ', kt 
     292        if (lwp) write(numout,'(a,i5,a,i12)') '   reading CBC data for ', nb_trccbc ,' variables at step ', kt 
    293293        CALL fld_read(kt,1,sf_trccbc) 
    294294      ENDIF    
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/trcdta.F90

    r7398 r10115  
    200200               DO ji = 1, jpi 
    201201                  DO jk = 1, jpk                        ! determines the intepolated T-S profiles at each (i,j) points 
    202                      zl = fsdept_n(ji,jj,jk) 
     202                     zl = gdept_0(ji,jj,jk) 
    203203                     IF(     zl < gdept_1d(1  ) ) THEN         ! above the first level of data 
    204204                        ztp(jk) = ztrcdta(ji,jj,1) 
     
    229229                     ik = mbkt(ji,jj)  
    230230                     IF( ik > 1 ) THEN 
    231                         zl = ( gdept_1d(ik) - fsdept_n(ji,jj,ik) ) / ( gdept_1d(ik) - gdept_1d(ik-1) ) 
     231                        zl = ( gdept_1d(ik) - gdept_0(ji,jj,ik) ) / ( gdept_1d(ik) - gdept_1d(ik-1) ) 
    232232                        ztrcdta(ji,jj,ik) = (1.-zl) * ztrcdta(ji,jj,ik) + zl * ztrcdta(ji,jj,ik-1) 
    233233                     ENDIF 
    234234                     ik = mikt(ji,jj) 
    235235                     IF( ik > 1 ) THEN 
    236                         zl = ( fsdept_n(ji,jj,ik) - gdept_1d(ik) ) / ( gdept_1d(ik+1) - gdept_1d(ik) ) 
     236                        zl = ( gdept_0(ji,jj,ik) - gdept_1d(ik) ) / ( gdept_1d(ik+1) - gdept_1d(ik) ) 
    237237                        ztrcdta(ji,jj,ik) = (1.-zl) * ztrcdta(ji,jj,ik) + zl * ztrcdta(ji,jj,ik+1) 
    238238                     ENDIF 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/trcice.F90

    r6772 r10115  
    5252      IF ( nn_ice_tr == 1 ) THEN 
    5353         IF( lk_pisces  )    CALL trc_ice_ini_pisces       ! PISCES  bio-model 
     54         IF( lk_my_trc  )    CALL trc_ice_ini_my_trc       ! MY_TRC  tracers 
    5455         IF( lk_cfc     )    CALL trc_ice_ini_cfc          ! CFC     tracers 
    5556         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 
    5757      ENDIF 
    5858 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/trcini.F90

    r7806 r10115  
    9999 
    100100      IF( lk_pisces  )       CALL trc_ini_pisces       ! PISCES  bio-model 
     101      IF( lk_my_trc  )       CALL trc_ini_my_trc       ! MY_TRC    tracers 
    101102      IF( lk_cfc     )       CALL trc_ini_cfc          ! CFC       tracers 
    102103      IF( lk_c14b    )       CALL trc_ini_c14b         ! C14 bomb  tracer 
    103104      IF( lk_age     )       CALL trc_ini_age          ! AGE       tracer 
    104       IF( lk_my_trc  )       CALL trc_ini_my_trc       ! MY_TRC    tracers 
    105105 
    106106      CALL trc_ice_ini                                 ! Tracers in sea ice 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/trcnam.F90

    r7806 r10115  
    7979      ENDIF 
    8080 
     81      ! Call the ice module for tracers 
     82      ! ------------------------------- 
     83      CALL trc_nam_ice 
     84 
     85      ! namelist of SMS 
     86      ! --------------- 
     87      IF( lk_pisces  ) THEN   ;   CALL trc_nam_pisces      ! PISCES  bio-model 
     88      ELSE                    ;   IF(lwp) WRITE(numout,*) '          PISCES not used' 
     89      ENDIF 
     90 
     91      IF( lk_my_trc  ) THEN  ;   CALL trc_nam_my_trc       ! MY_TRC  tracers 
     92      ELSE                   ;   IF(lwp) WRITE(numout,*)  '          MY_TRC not used' 
     93      ENDIF 
     94 
     95      IF( lk_cfc     ) THEN   ;   CALL trc_nam_cfc         ! CFC     tracers 
     96      ELSE                    ;   IF(lwp) WRITE(numout,*) '          CFC not used' 
     97      ENDIF 
     98 
     99      IF( lk_c14b    ) THEN  ;   CALL trc_nam_c14b         ! C14 bomb     tracers 
     100      ELSE                   ;   IF(lwp) WRITE(numout,*)  '          C14 not used' 
     101      ENDIF 
     102 
     103      IF( lk_age     ) THEN  ;   CALL trc_nam_age         ! AGE     tracer 
     104      ELSE                   ;   IF(lwp) WRITE(numout,*)  '          AGE not used' 
     105      ENDIF 
     106 
    81107     IF(lwp) THEN                   ! control print 
    82108         WRITE(numout,*) 
     
    119145      ENDIF 
    120146 
     147      ! 
     148   END SUBROUTINE trc_nam 
     149 
     150   SUBROUTINE trc_nam_run 
     151      !!--------------------------------------------------------------------- 
     152      !!                     ***  ROUTINE trc_nam  *** 
     153      !! 
     154      !! ** Purpose :   read options for the passive tracer run (namelist)  
     155      !! 
     156      !!--------------------------------------------------------------------- 
     157      NAMELIST/namtrc_run/ nn_dttrc, nn_writetrc, ln_rsttr, nn_rsttr, ln_top_euler, & 
     158        &                  cn_trcrst_indir, cn_trcrst_outdir, cn_trcrst_in, cn_trcrst_out 
     159 
     160 
     161      INTEGER  ::   ios                 ! Local integer output status for namelist read 
     162 
     163      !!--------------------------------------------------------------------- 
     164 
     165 
     166      IF(lwp) WRITE(numout,*) 'trc_nam : read the passive tracer namelists' 
     167      IF(lwp) WRITE(numout,*) '~~~~~~~' 
     168 
     169      CALL ctl_opn( numnat_ref, 'namelist_top_ref'   , 'OLD'    , 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 
     170      CALL ctl_opn( numnat_cfg, 'namelist_top_cfg'   , 'OLD'    , 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 
     171      IF(lwm) CALL ctl_opn( numont, 'output.namelist.top', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE., 1 ) 
     172 
     173      REWIND( numnat_ref )              ! Namelist namtrc in reference namelist : Passive tracer variables 
     174      READ  ( numnat_ref, namtrc_run, IOSTAT = ios, ERR = 901) 
     175901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc in reference namelist', lwp ) 
     176 
     177      REWIND( numnat_cfg )              ! Namelist namtrc in configuration namelist : Passive tracer variables 
     178      READ  ( numnat_cfg, namtrc_run, IOSTAT = ios, ERR = 902 ) 
     179902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc in configuration namelist', lwp ) 
     180      IF(lwm) WRITE ( numont, namtrc_run ) 
     181 
     182      !  computes the first time step of tracer model 
     183      nittrc000 = nit000 + nn_dttrc - 1 
     184 
     185      IF(lwp) THEN                   ! control print 
     186         WRITE(numout,*) 
     187         WRITE(numout,*) ' Namelist : namtrc_run' 
     188         WRITE(numout,*) '   time step freq. for passive tracer           nn_dttrc      = ', nn_dttrc 
     189         WRITE(numout,*) '   restart  for passive tracer                  ln_rsttr      = ', ln_rsttr 
     190         WRITE(numout,*) '   control of time step for passive tracer      nn_rsttr      = ', nn_rsttr 
     191         WRITE(numout,*) '   first time step for pass. trac.              nittrc000     = ', nittrc000 
     192         WRITE(numout,*) '   frequency of outputs for passive tracers     nn_writetrc   = ', nn_writetrc  
     193         WRITE(numout,*) '   Use euler integration for TRC (y/n)          ln_top_euler  = ', ln_top_euler 
     194         WRITE(numout,*) ' ' 
     195      ENDIF 
     196      ! 
     197    END SUBROUTINE trc_nam_run 
     198 
     199   SUBROUTINE trc_nam_ice 
     200      !!--------------------------------------------------------------------- 
     201      !!                     ***  ROUTINE trc_nam_ice *** 
     202      !! 
     203      !! ** Purpose :   Read the namelist for the ice effect on tracers 
     204      !! 
     205      !! ** Method  : - 
     206      !! 
     207      !!--------------------------------------------------------------------- 
     208      ! --- Variable declarations --- ! 
     209      INTEGER :: jn      ! dummy loop indices 
     210      INTEGER :: ios     ! Local integer output status for namelist read 
     211 
     212      ! --- Namelist declarations --- ! 
     213      TYPE(TRC_I_NML), DIMENSION(jptra) :: sn_tri_tracer 
     214      NAMELIST/namtrc_ice/ nn_ice_tr, sn_tri_tracer 
     215 
     216      IF(lwp) THEN 
     217         WRITE(numout,*) 
     218         WRITE(numout,*) 'trc_nam_ice : Read the namelist for trc_ice' 
     219         WRITE(numout,*) '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
     220      ENDIF 
     221 
     222      IF( nn_timing == 1 )  CALL timing_start('trc_nam_ice') 
     223 
     224      ! 
     225      REWIND( numnat_ref )              ! Namelist namtrc_ice in reference namelist : Passive tracer input data 
     226      READ  ( numnat_ref, namtrc_ice, IOSTAT = ios, ERR = 901) 
     227 901  IF( ios /= 0 ) CALL ctl_nam ( ios , ' namtrc_ice in reference namelist ', lwp ) 
     228 
     229      REWIND( numnat_cfg )              ! Namelist namtrc_ice in configuration namelist : Pisces external sources of nutrients 
     230      READ  ( numnat_cfg, namtrc_ice, IOSTAT = ios, ERR = 902 ) 
     231 902  IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_ice in configuration namelist', lwp ) 
     232 
     233      IF( lwp ) THEN 
     234         WRITE(numout,*) ' ' 
     235         WRITE(numout,*) ' Sea ice tracers option (nn_ice_tr) : ', nn_ice_tr 
     236         WRITE(numout,*) ' ' 
     237      ENDIF 
     238 
     239      ! Assign namelist stuff 
     240      DO jn = 1, jptra 
     241         trc_ice_ratio(jn)  = sn_tri_tracer(jn)%trc_ratio 
     242         trc_ice_prescr(jn) = sn_tri_tracer(jn)%trc_prescr 
     243         cn_trc_o      (jn) = sn_tri_tracer(jn)%ctrc_o 
     244      END DO 
     245 
     246      IF( nn_timing == 1 )   CALL timing_stop('trc_nam_ice') 
     247      ! 
     248   END SUBROUTINE trc_nam_ice 
     249 
     250   SUBROUTINE trc_nam_trc 
     251      !!--------------------------------------------------------------------- 
     252      !!                     ***  ROUTINE trc_nam  *** 
     253      !! 
     254      !! ** Purpose :   read options for the passive tracer run (namelist)  
     255      !! 
     256      !!--------------------------------------------------------------------- 
     257      TYPE(PTRACER), DIMENSION(jptra) :: sn_tracer  ! type of tracer for saving if not key_iomput 
     258      !! 
     259      NAMELIST/namtrc/ sn_tracer, ln_trcdta,ln_trcdmp, ln_trcdmp_clo 
     260   
     261      INTEGER  ::   ios                 ! Local integer output status for namelist read 
     262      INTEGER  ::   jn                  ! dummy loop indice 
     263      !!--------------------------------------------------------------------- 
     264      IF(lwp) WRITE(numout,*) 
     265      IF(lwp) WRITE(numout,*) 'trc_nam : read the passive tracer namelists' 
     266      IF(lwp) WRITE(numout,*) '~~~~~~~' 
     267 
     268 
     269      REWIND( numnat_ref )              ! Namelist namtrc in reference namelist : Passive tracer variables 
     270      READ  ( numnat_ref, namtrc, IOSTAT = ios, ERR = 901) 
     271901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc in reference namelist', lwp ) 
     272 
     273      REWIND( numnat_cfg )              ! Namelist namtrc in configuration namelist : Passive tracer variables 
     274      READ  ( numnat_cfg, namtrc, IOSTAT = ios, ERR = 902 ) 
     275902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc in configuration namelist', lwp ) 
     276      IF(lwm) WRITE ( numont, namtrc ) 
     277 
     278      DO jn = 1, jptra 
     279         ctrcnm    (jn) = TRIM( sn_tracer(jn)%clsname ) 
     280         ctrcln    (jn) = TRIM( sn_tracer(jn)%cllname ) 
     281         ctrcun    (jn) = TRIM( sn_tracer(jn)%clunit  ) 
     282         ln_trc_ini(jn) =       sn_tracer(jn)%llinit 
     283         ln_trc_wri(jn) =       sn_tracer(jn)%llsave 
     284      END DO 
     285       
     286    END SUBROUTINE trc_nam_trc 
     287 
     288 
     289   SUBROUTINE trc_nam_dia 
     290      !!--------------------------------------------------------------------- 
     291      !!                     ***  ROUTINE trc_nam_dia  *** 
     292      !! 
     293      !! ** Purpose :   read options for the passive tracer diagnostics 
     294      !! 
     295      !! ** Method  : - read passive tracer namelist  
     296      !!              - read namelist of each defined SMS model 
     297      !!                ( (PISCES, CFC, MY_TRC ) 
     298      !!--------------------------------------------------------------------- 
     299      INTEGER ::  ierr 
     300#if defined key_trdmxl_trc  || defined key_trdtrc 
     301      NAMELIST/namtrc_trd/ nn_trd_trc, nn_ctls_trc, rn_ucf_trc, & 
     302         &                ln_trdmxl_trc_restart, ln_trdmxl_trc_instant, & 
     303         &                cn_trdrst_trc_in, cn_trdrst_trc_out, ln_trdtrc 
     304#endif 
     305      NAMELIST/namtrc_dia/ ln_diatrc, ln_diabio, nn_writedia, nn_writebio 
     306 
     307      INTEGER  ::   jn         
     308      INTEGER  ::   ios                 ! Local integer output status for namelist read 
     309      !!--------------------------------------------------------------------- 
     310 
     311      IF(lwp) WRITE(numout,*)  
     312      IF(lwp) WRITE(numout,*) 'trc_nam_dia : read the passive tracer diagnostics options' 
     313      IF(lwp) WRITE(numout,*) '~~~~~~~' 
     314 
     315      IF(lwp) WRITE(numout,*) 
     316      IF(lwp) WRITE(numout,*) 'trc_nam_dia : read the passive tracer diagnostics options' 
     317      IF(lwp) WRITE(numout,*) '~~~~~~~' 
     318 
     319      REWIND( numnat_ref )              ! Namelist namtrc_dia in reference namelist : Passive tracer diagnostics 
     320      READ  ( numnat_ref, namtrc_dia, IOSTAT = ios, ERR = 903) 
     321903   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_dia in reference namelist', lwp ) 
     322 
     323      REWIND( numnat_cfg )              ! Namelist namtrc_dia in configuration namelist : Passive tracer diagnostics 
     324      READ  ( numnat_cfg, namtrc_dia, IOSTAT = ios, ERR = 904 ) 
     325904   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_dia in configuration namelist', lwp ) 
     326      IF(lwm) WRITE ( numont, namtrc_dia ) 
     327 
     328      IF(lwp) THEN 
     329         WRITE(numout,*) 
     330         WRITE(numout,*) 
     331         WRITE(numout,*) ' Namelist : namtrc_dia' 
     332         WRITE(numout,*) '    save additionnal diagnostics arrays         ln_diatrc   = ', ln_diatrc 
     333         WRITE(numout,*) '    save additionnal biology diagnostics arrays ln_diabio   = ', ln_diabio 
     334         WRITE(numout,*) '    frequency of outputs for additional arrays  nn_writedia = ', nn_writedia 
     335         WRITE(numout,*) '    frequency of outputs for biological trends  nn_writebio = ', nn_writebio 
     336         WRITE(numout,*) ' ' 
     337      ENDIF 
     338 
     339      IF( ln_diatrc ) THEN  
     340         ALLOCATE( trc2d(jpi,jpj,jpdia2d), trc3d(jpi,jpj,jpk,jpdia3d),  & 
     341           &       ctrc2d(jpdia2d), ctrc2l(jpdia2d), ctrc2u(jpdia2d) ,  &  
     342           &       ctrc3d(jpdia3d), ctrc3l(jpdia3d), ctrc3u(jpdia3d) ,  STAT = ierr )  
     343         IF( ierr > 0 )   CALL ctl_stop( 'STOP', 'trcnam: unable to allocate add. diag. array' ) 
     344         ! 
     345         trc2d(:,:,:  ) = 0._wp  ;   ctrc2d(:) = ' '   ;   ctrc2l(:) = ' '    ;    ctrc2u(:) = ' '  
     346         trc3d(:,:,:,:) = 0._wp  ;   ctrc3d(:) = ' '   ;   ctrc3l(:) = ' '    ;    ctrc3u(:) = ' '  
     347         ! 
     348      ENDIF 
     349 
     350      IF( ln_diabio .OR. l_trdtrc ) THEN 
     351         ALLOCATE( trbio (jpi,jpj,jpk,jpdiabio) , & 
     352           &       ctrbio(jpdiabio), ctrbil(jpdiabio), ctrbiu(jpdiabio), STAT = ierr )  
     353         IF( ierr > 0 )   CALL ctl_stop( 'STOP', 'trcnam: unable to allocate bio. diag. array' ) 
     354         ! 
     355         trbio(:,:,:,:) = 0._wp  ;   ctrbio(:) = ' '   ;   ctrbil(:) = ' '    ;    ctrbiu(:) = ' '  
     356         ! 
     357      ENDIF 
    121358 
    122359#if defined key_trdmxl_trc || defined key_trdtrc 
     
    146383         ENDIF 
    147384#endif 
    148  
    149  
    150       ! Call the ice module for tracers 
    151       ! ------------------------------- 
    152       CALL trc_nam_ice 
    153  
    154       ! namelist of SMS 
    155       ! ---------------       
    156       IF( lk_pisces  ) THEN   ;   CALL trc_nam_pisces      ! PISCES  bio-model 
    157       ELSE                    ;   IF(lwp) WRITE(numout,*) '          PISCES not used' 
    158       ENDIF 
    159  
    160       IF( lk_cfc     ) THEN   ;   CALL trc_nam_cfc         ! CFC     tracers 
    161       ELSE                    ;   IF(lwp) WRITE(numout,*) '          CFC not used' 
    162       ENDIF 
    163  
    164       IF( lk_c14b    ) THEN  ;   CALL trc_nam_c14b         ! C14 bomb     tracers 
    165       ELSE                   ;   IF(lwp) WRITE(numout,*) '          C14 not used' 
    166       ENDIF 
    167  
    168       IF( lk_age     ) THEN  ;   CALL trc_nam_age         ! AGE     tracer 
    169       ELSE                   ;   IF(lwp) WRITE(numout,*) '          AGE not used' 
    170       ENDIF 
    171  
    172       IF( lk_my_trc  ) THEN  ;   CALL trc_nam_my_trc      ! MY_TRC  tracers 
    173       ELSE                   ;   IF(lwp) WRITE(numout,*) '          MY_TRC not used' 
    174       ENDIF 
    175       ! 
    176    END SUBROUTINE trc_nam 
    177  
    178    SUBROUTINE trc_nam_run 
    179       !!--------------------------------------------------------------------- 
    180       !!                     ***  ROUTINE trc_nam  *** 
    181       !! 
    182       !! ** Purpose :   read options for the passive tracer run (namelist)  
    183       !! 
    184       !!--------------------------------------------------------------------- 
    185       NAMELIST/namtrc_run/ nn_dttrc, nn_writetrc, ln_rsttr, nn_rsttr, ln_top_euler, & 
    186         &                  cn_trcrst_indir, cn_trcrst_outdir, cn_trcrst_in, cn_trcrst_out 
    187  
    188  
    189       INTEGER  ::   ios                 ! Local integer output status for namelist read 
    190  
    191       !!--------------------------------------------------------------------- 
    192  
    193  
    194       IF(lwp) WRITE(numout,*) 'trc_nam : read the passive tracer namelists' 
    195       IF(lwp) WRITE(numout,*) '~~~~~~~' 
    196  
    197       CALL ctl_opn( numnat_ref, 'namelist_top_ref'   , 'OLD'    , 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 
    198       CALL ctl_opn( numnat_cfg, 'namelist_top_cfg'   , 'OLD'    , 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE. ) 
    199       IF(lwm) CALL ctl_opn( numont, 'output.namelist.top', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE., 1 ) 
    200  
    201       REWIND( numnat_ref )              ! Namelist namtrc in reference namelist : Passive tracer variables 
    202       READ  ( numnat_ref, namtrc_run, IOSTAT = ios, ERR = 901) 
    203 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc in reference namelist', lwp ) 
    204  
    205       REWIND( numnat_cfg )              ! Namelist namtrc in configuration namelist : Passive tracer variables 
    206       READ  ( numnat_cfg, namtrc_run, IOSTAT = ios, ERR = 902 ) 
    207 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc in configuration namelist', lwp ) 
    208       IF(lwm) WRITE ( numont, namtrc_run ) 
    209  
    210       !  computes the first time step of tracer model 
    211       nittrc000 = nit000 + nn_dttrc - 1 
    212  
    213       IF(lwp) THEN                   ! control print 
    214          WRITE(numout,*) 
    215          WRITE(numout,*) ' Namelist : namtrc_run' 
    216          WRITE(numout,*) '   time step freq. for passive tracer           nn_dttrc      = ', nn_dttrc 
    217          WRITE(numout,*) '   restart  for passive tracer                  ln_rsttr      = ', ln_rsttr 
    218          WRITE(numout,*) '   control of time step for passive tracer      nn_rsttr      = ', nn_rsttr 
    219          WRITE(numout,*) '   first time step for pass. trac.              nittrc000     = ', nittrc000 
    220          WRITE(numout,*) '   frequency of outputs for passive tracers     nn_writetrc   = ', nn_writetrc  
    221          WRITE(numout,*) '   Use euler integration for TRC (y/n)          ln_top_euler  = ', ln_top_euler 
    222          WRITE(numout,*) ' ' 
    223       ENDIF 
    224       ! 
    225     END SUBROUTINE trc_nam_run 
    226  
    227    SUBROUTINE trc_nam_ice 
    228       !!--------------------------------------------------------------------- 
    229       !!                     ***  ROUTINE trc_nam_ice *** 
    230       !! 
    231       !! ** Purpose :   Read the namelist for the ice effect on tracers 
    232       !! 
    233       !! ** Method  : - 
    234       !! 
    235       !!--------------------------------------------------------------------- 
    236       ! --- Variable declarations --- ! 
    237       INTEGER :: jn      ! dummy loop indices 
    238       INTEGER :: ios     ! Local integer output status for namelist read 
    239  
    240       ! --- Namelist declarations --- ! 
    241       TYPE(TRC_I_NML), DIMENSION(jptra) :: sn_tri_tracer 
    242       NAMELIST/namtrc_ice/ nn_ice_tr, sn_tri_tracer 
    243  
    244       IF(lwp) THEN 
    245          WRITE(numout,*) 
    246          WRITE(numout,*) 'trc_nam_ice : Read the namelist for trc_ice' 
    247          WRITE(numout,*) '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~' 
    248       ENDIF 
    249  
    250       IF( nn_timing == 1 )  CALL timing_start('trc_nam_ice') 
    251  
    252       ! 
    253       REWIND( numnat_ref )              ! Namelist namtrc_ice in reference namelist : Passive tracer input data 
    254       READ  ( numnat_ref, namtrc_ice, IOSTAT = ios, ERR = 901) 
    255  901  IF( ios /= 0 ) CALL ctl_nam ( ios , ' namtrc_ice in reference namelist ', lwp ) 
    256  
    257       REWIND( numnat_cfg )              ! Namelist namtrc_ice in configuration namelist : Pisces external sources of nutrients 
    258       READ  ( numnat_cfg, namtrc_ice, IOSTAT = ios, ERR = 902 ) 
    259  902  IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_ice in configuration namelist', lwp ) 
    260  
    261       IF( lwp ) THEN 
    262          WRITE(numout,*) ' ' 
    263          WRITE(numout,*) ' Sea ice tracers option (nn_ice_tr) : ', nn_ice_tr 
    264          WRITE(numout,*) ' ' 
    265       ENDIF 
    266  
    267       ! Assign namelist stuff 
    268       DO jn = 1, jptra 
    269          trc_ice_ratio(jn)  = sn_tri_tracer(jn)%trc_ratio 
    270          trc_ice_prescr(jn) = sn_tri_tracer(jn)%trc_prescr 
    271          cn_trc_o      (jn) = sn_tri_tracer(jn)%ctrc_o 
    272       END DO 
    273  
    274       IF( nn_timing == 1 )   CALL timing_stop('trc_nam_ice') 
    275       ! 
    276    END SUBROUTINE trc_nam_ice 
    277  
    278    SUBROUTINE trc_nam_trc 
    279       !!--------------------------------------------------------------------- 
    280       !!                     ***  ROUTINE trc_nam  *** 
    281       !! 
    282       !! ** Purpose :   read options for the passive tracer run (namelist)  
    283       !! 
    284       !!--------------------------------------------------------------------- 
    285       TYPE(PTRACER), DIMENSION(jptra) :: sn_tracer  ! type of tracer for saving if not key_iomput 
    286       !! 
    287       NAMELIST/namtrc/ sn_tracer, ln_trcdta,ln_trcdmp, ln_trcdmp_clo 
    288    
    289       INTEGER  ::   ios                 ! Local integer output status for namelist read 
    290       INTEGER  ::   jn                  ! dummy loop indice 
    291       !!--------------------------------------------------------------------- 
    292       IF(lwp) WRITE(numout,*) 
    293       IF(lwp) WRITE(numout,*) 'trc_nam : read the passive tracer namelists' 
    294       IF(lwp) WRITE(numout,*) '~~~~~~~' 
    295  
    296  
    297       REWIND( numnat_ref )              ! Namelist namtrc in reference namelist : Passive tracer variables 
    298       READ  ( numnat_ref, namtrc, IOSTAT = ios, ERR = 901) 
    299 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc in reference namelist', lwp ) 
    300  
    301       REWIND( numnat_cfg )              ! Namelist namtrc in configuration namelist : Passive tracer variables 
    302       READ  ( numnat_cfg, namtrc, IOSTAT = ios, ERR = 902 ) 
    303 902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc in configuration namelist', lwp ) 
    304       IF(lwm) WRITE ( numont, namtrc ) 
    305  
    306       DO jn = 1, jptra 
    307          ctrcnm    (jn) = TRIM( sn_tracer(jn)%clsname ) 
    308          ctrcln    (jn) = TRIM( sn_tracer(jn)%cllname ) 
    309          ctrcun    (jn) = TRIM( sn_tracer(jn)%clunit  ) 
    310          ln_trc_ini(jn) =       sn_tracer(jn)%llinit 
    311          ln_trc_wri(jn) =       sn_tracer(jn)%llsave 
    312       END DO 
    313        
    314     END SUBROUTINE trc_nam_trc 
    315  
    316  
    317    SUBROUTINE trc_nam_dia 
    318       !!--------------------------------------------------------------------- 
    319       !!                     ***  ROUTINE trc_nam_dia  *** 
    320       !! 
    321       !! ** Purpose :   read options for the passive tracer diagnostics 
    322       !! 
    323       !! ** Method  : - read passive tracer namelist  
    324       !!              - read namelist of each defined SMS model 
    325       !!                ( (PISCES, CFC, MY_TRC ) 
    326       !!--------------------------------------------------------------------- 
    327       INTEGER ::  ierr 
    328 #if defined key_trdmxl_trc  || defined key_trdtrc 
    329       NAMELIST/namtrc_trd/ nn_trd_trc, nn_ctls_trc, rn_ucf_trc, & 
    330          &                ln_trdmxl_trc_restart, ln_trdmxl_trc_instant, & 
    331          &                cn_trdrst_trc_in, cn_trdrst_trc_out, ln_trdtrc 
    332 #endif 
    333       NAMELIST/namtrc_dia/ ln_diatrc, ln_diabio, nn_writedia, nn_writebio 
    334  
    335       INTEGER  ::   ios                 ! Local integer output status for namelist read 
    336       !!--------------------------------------------------------------------- 
    337  
    338       IF(lwp) WRITE(numout,*)  
    339       IF(lwp) WRITE(numout,*) 'trc_nam_dia : read the passive tracer diagnostics options' 
    340       IF(lwp) WRITE(numout,*) '~~~~~~~' 
    341  
    342       IF(lwp) WRITE(numout,*) 
    343       IF(lwp) WRITE(numout,*) 'trc_nam_dia : read the passive tracer diagnostics options' 
    344       IF(lwp) WRITE(numout,*) '~~~~~~~' 
    345  
    346       REWIND( numnat_ref )              ! Namelist namtrc_dia in reference namelist : Passive tracer diagnostics 
    347       READ  ( numnat_ref, namtrc_dia, IOSTAT = ios, ERR = 903) 
    348 903   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_dia in reference namelist', lwp ) 
    349  
    350       REWIND( numnat_cfg )              ! Namelist namtrc_dia in configuration namelist : Passive tracer diagnostics 
    351       READ  ( numnat_cfg, namtrc_dia, IOSTAT = ios, ERR = 904 ) 
    352 904   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtrc_dia in configuration namelist', lwp ) 
    353       IF(lwm) WRITE ( numont, namtrc_dia ) 
    354  
    355       IF(lwp) THEN 
    356          WRITE(numout,*) 
    357          WRITE(numout,*) 
    358          WRITE(numout,*) ' Namelist : namtrc_dia' 
    359          WRITE(numout,*) '    save additionnal diagnostics arrays         ln_diatrc   = ', ln_diatrc 
    360          WRITE(numout,*) '    save additionnal biology diagnostics arrays ln_diabio   = ', ln_diabio 
    361          WRITE(numout,*) '    frequency of outputs for additional arrays  nn_writedia = ', nn_writedia 
    362          WRITE(numout,*) '    frequency of outputs for biological trends  nn_writebio = ', nn_writebio 
    363          WRITE(numout,*) ' ' 
    364       ENDIF 
    365  
    366       IF( ln_diatrc ) THEN  
    367          ALLOCATE( trc2d(jpi,jpj,jpdia2d), trc3d(jpi,jpj,jpk,jpdia3d),  & 
    368            &       ctrc2d(jpdia2d), ctrc2l(jpdia2d), ctrc2u(jpdia2d) ,  &  
    369            &       ctrc3d(jpdia3d), ctrc3l(jpdia3d), ctrc3u(jpdia3d) ,  STAT = ierr )  
    370          IF( ierr > 0 )   CALL ctl_stop( 'STOP', 'trcnam: unable to allocate add. diag. array' ) 
    371          ! 
    372          trc2d(:,:,:  ) = 0._wp  ;   ctrc2d(:) = ' '   ;   ctrc2l(:) = ' '    ;    ctrc2u(:) = ' '  
    373          trc3d(:,:,:,:) = 0._wp  ;   ctrc3d(:) = ' '   ;   ctrc3l(:) = ' '    ;    ctrc3u(:) = ' '  
    374          ! 
    375       ENDIF 
    376  
    377       IF( ln_diabio .OR. l_trdtrc ) THEN 
    378          ALLOCATE( trbio (jpi,jpj,jpk,jpdiabio) , & 
    379            &       ctrbio(jpdiabio), ctrbil(jpdiabio), ctrbiu(jpdiabio), STAT = ierr )  
    380          IF( ierr > 0 )   CALL ctl_stop( 'STOP', 'trcnam: unable to allocate bio. diag. array' ) 
    381          ! 
    382          trbio(:,:,:,:) = 0._wp  ;   ctrbio(:) = ' '   ;   ctrbil(:) = ' '    ;    ctrbiu(:) = ' '  
    383          ! 
    384       ENDIF 
    385385      ! 
    386386   END SUBROUTINE trc_nam_dia 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/trcsms.F90

    r7806 r10115  
    5050      ! 
    5151      IF( lk_pisces  )   CALL trc_sms_pisces ( kt )    ! main program of PISCES  
     52      IF( lk_my_trc  )   CALL trc_sms_my_trc ( kt )    ! MY_TRC  tracers 
    5253      IF( lk_cfc     )   CALL trc_sms_cfc    ( kt )    ! surface fluxes of CFC 
    5354      IF( lk_c14b    )   CALL trc_sms_c14b   ( kt )    ! surface fluxes of C14 
    5455      IF( lk_age     )   CALL trc_sms_age    ( kt )    ! AGE tracer 
    55       IF( lk_my_trc  )   CALL trc_sms_my_trc ( kt )    ! MY_TRC  tracers 
    5656 
    5757      IF(ln_ctl) THEN      ! print mean trends (used for debugging) 
  • NEMO/branches/2018/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/TOP_SRC/trcwri.F90

    r7806 r10115  
    5858      ! --------------------------------------- 
    5959      IF( lk_pisces  )   CALL trc_wri_pisces     ! PISCES  
     60      IF( lk_my_trc  )   CALL trc_wri_my_trc     ! MY_TRC  tracers 
    6061      IF( lk_cfc     )   CALL trc_wri_cfc        ! surface fluxes of CFC 
    6162      IF( lk_c14b    )   CALL trc_wri_c14b       ! surface fluxes of C14 
    6263      IF( lk_age     )   CALL trc_wri_age        ! AGE tracer 
    63       IF( lk_my_trc  )   CALL trc_wri_my_trc     ! MY_TRC  tracers 
    6464      ! 
    6565      IF( nn_timing == 1 )  CALL timing_stop('trc_wri') 
Note: See TracChangeset for help on using the changeset viewer.