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

Changeset 10966


Ignore:
Timestamp:
2019-05-10T18:43:09+02:00 (6 years ago)
Author:
acc
Message:

2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps : Convert TOP routines in TOP/TRP directory and all knock on effects of these conversions. SETTE tested (GYRE_PISCES only)

Location:
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src
Files:
25 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRD/trdtra.F90

    r10946 r10966  
    172172         END SELECT 
    173173         !                            ! send trend to trd_trc 
    174          CALL trd_trc( ztrds, ktra, ktrd, kt )  
     174         CALL trd_trc( ztrds, ktra, ktrd, kt, Kmm )  
    175175         ! 
    176176      ENDIF 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRD/trdtrc.F90

    r10068 r10966  
    99CONTAINS 
    1010 
    11    SUBROUTINE trd_trc( ptrtrd, kjn, ktrd, kt ) 
     11   SUBROUTINE trd_trc( ptrtrd, kjn, ktrd, kt, Kmm ) 
    1212      INTEGER ::   kt, kjn, ktrd    
     13      INTEGER ::   Kmm            ! time level index 
    1314      REAL    ::   ptrtrd(:,:,:)   
    1415      WRITE(*,*) 'trd_trc : You should not have seen this print! error?', ptrtrd(1,1,1) 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/AGE/trcsms_age.F90

    r10070 r10966  
    3737CONTAINS 
    3838 
    39    SUBROUTINE trc_sms_age( kt ) 
     39   SUBROUTINE trc_sms_age( kt, Kmm ) 
    4040      !!---------------------------------------------------------------------- 
    4141      !!                     ***  trc_sms_age  *** 
     
    4646      !!---------------------------------------------------------------------- 
    4747      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
     48      INTEGER, INTENT(in) ::   Kmm  ! ocean time level 
    4849      INTEGER ::   jn, jk   ! dummy loop index 
    4950      !!---------------------------------------------------------------------- 
     
    6768      END DO 
    6869      ! 
    69       IF( l_trdtrc ) CALL trd_trc( tra(:,:,:,jp_age), jn, jptra_sms, kt )   ! save trends 
     70      IF( l_trdtrc ) CALL trd_trc( tra(:,:,:,jp_age), jn, jptra_sms, kt, Kmm )   ! save trends 
    7071      ! 
    7172      IF( ln_timing )   CALL timing_stop('trc_sms_age') 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/C14/trcsms_c14.F90

    r10069 r10966  
    3333CONTAINS 
    3434 
    35    SUBROUTINE trc_sms_c14( kt ) 
     35   SUBROUTINE trc_sms_c14( kt, Kmm ) 
    3636      !!---------------------------------------------------------------------- 
    3737      !!                  ***  ROUTINE trc_sms_c14  *** 
     
    5151      ! 
    5252      INTEGER, INTENT(in) ::   kt    ! ocean time-step index 
     53      INTEGER, INTENT(in) ::   Kmm   ! ocean time level 
    5354      ! 
    5455      INTEGER  :: ji, jj, jk         ! dummy loop indices  
     
    157158      ENDIF 
    158159 
    159       IF( l_trdtrc )  CALL trd_trc( tra(:,:,:,jp_c14), 1, jptra_sms, kt )   ! save trends 
     160      IF( l_trdtrc )  CALL trd_trc( tra(:,:,:,jp_c14), 1, jptra_sms, kt, Kmm )   ! save trends 
    160161      ! 
    161162      IF( ln_timing )   CALL timing_stop('trc_sms_c14') 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/CFC/trcsms_cfc.F90

    r10425 r10966  
    5454CONTAINS 
    5555 
    56    SUBROUTINE trc_sms_cfc( kt ) 
     56   SUBROUTINE trc_sms_cfc( kt, Kmm ) 
    5757      !!---------------------------------------------------------------------- 
    5858      !!                     ***  ROUTINE trc_sms_cfc  *** 
     
    7171      !!---------------------------------------------------------------------- 
    7272      INTEGER, INTENT(in) ::   kt    ! ocean time-step index 
     73      INTEGER, INTENT(in) ::   Kmm   ! ocean time level 
    7374      ! 
    7475      INTEGER  ::   ji, jj, jn, jl, jm 
     
    191192      IF( l_trdtrc ) THEN 
    192193          DO jn = jp_cfc0, jp_cfc1 
    193             CALL trd_trc( tra(:,:,:,jn), jn, jptra_sms, kt )   ! save trends 
     194            CALL trd_trc( tra(:,:,:,jn), jn, jptra_sms, kt, Kmm )   ! save trends 
    194195          END DO 
    195196      END IF 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/MY_TRC/trcsms_my_trc.F90

    r10963 r10966  
    6363          DO jn = jp_myt0, jp_myt1 
    6464            ztrmyt(:,:,:) = tra(:,:,:,jn) 
    65             CALL trd_trc( ztrmyt, jn, jptra_sms, kt )   ! save trends 
     65            CALL trd_trc( ztrmyt, jn, jptra_sms, kt, Kmm )   ! save trends 
    6666          END DO 
    6767          DEALLOCATE( ztrmyt ) 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/PISCES/P2Z/p2zsms.F90

    r10068 r10966  
    3535CONTAINS 
    3636 
    37    SUBROUTINE p2z_sms( kt ) 
     37   SUBROUTINE p2z_sms( kt, Kmm ) 
    3838      !!--------------------------------------------------------------------- 
    3939      !!                     ***  ROUTINE p2z_sms  *** 
     
    4545      !! -------------------------------------------------------------------- 
    4646      INTEGER, INTENT( in ) ::   kt      ! ocean time-step index       
     47      INTEGER, INTENT( in ) ::   Kmm     ! ocean time level index       
    4748      ! 
    4849      INTEGER ::   jn   ! dummy loop index 
     
    5859      IF( l_trdtrc ) THEN 
    5960         DO jn = jp_pcs0, jp_pcs1 
    60            CALL trd_trc( tra(:,:,:,jn), jn, jptra_sms, kt )   ! save trends 
     61           CALL trd_trc( tra(:,:,:,jn), jn, jptra_sms, kt, Kmm )   ! save trends 
    6162         END DO 
    6263      END IF 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/PISCES/P4Z/p4zbio.F90

    r10227 r10966  
    4545CONTAINS 
    4646 
    47    SUBROUTINE p4z_bio ( kt, knt ) 
     47   SUBROUTINE p4z_bio ( kt, knt, Kbb, Kmm ) 
    4848      !!--------------------------------------------------------------------- 
    4949      !!                     ***  ROUTINE p4z_bio  *** 
     
    5656      !!--------------------------------------------------------------------- 
    5757      INTEGER, INTENT(in) :: kt, knt 
     58      INTEGER, INTENT(in) :: Kbb, Kmm  ! time level indices 
    5859      ! 
    5960      INTEGER             :: ji, jj, jk, jn 
     
    7879 
    7980      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_sink    ( kt, knt, Kbb, Kmm )     ! vertical flux of particulate organic matter 
    8182      CALL p4z_fechem  ( kt, knt )     ! Iron chemistry/scavenging 
    8283      ! 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/PISCES/P4Z/p4zsink.F90

    r10425 r10966  
    4949   !!---------------------------------------------------------------------- 
    5050 
    51    SUBROUTINE p4z_sink ( kt, knt ) 
     51   SUBROUTINE p4z_sink ( kt, knt, Kbb, Kmm ) 
    5252      !!--------------------------------------------------------------------- 
    5353      !!                     ***  ROUTINE p4z_sink  *** 
     
    5959      !!--------------------------------------------------------------------- 
    6060      INTEGER, INTENT(in) :: kt, knt 
     61      INTEGER, INTENT(in) :: Kbb, Kmm  ! time level indices 
    6162      INTEGER  ::   ji, jj, jk 
    6263      CHARACTER (len=25) :: charout 
     
    104105      !   Compute the sedimentation term using p4zsink2 for all the sinking particles 
    105106      !   ----------------------------------------------------- 
    106       CALL trc_sink( kt, wsbio3, sinking , jppoc, rfact2 ) 
    107       CALL trc_sink( kt, wsbio3, sinkfer , jpsfe, rfact2 ) 
    108       CALL trc_sink( kt, wsbio4, sinking2, jpgoc, rfact2 ) 
    109       CALL trc_sink( kt, wsbio4, sinkfer2, jpbfe, rfact2 ) 
    110       CALL trc_sink( kt, wsbio4, sinksil , jpgsi, rfact2 ) 
    111       CALL trc_sink( kt, wsbio4, sinkcal , jpcal, rfact2 ) 
     107      CALL trc_sink( kt, Kbb, Kmm, wsbio3, sinking , jppoc, rfact2 ) 
     108      CALL trc_sink( kt, Kbb, Kmm, wsbio3, sinkfer , jpsfe, rfact2 ) 
     109      CALL trc_sink( kt, Kbb, Kmm, wsbio4, sinking2, jpgoc, rfact2 ) 
     110      CALL trc_sink( kt, Kbb, Kmm, wsbio4, sinkfer2, jpbfe, rfact2 ) 
     111      CALL trc_sink( kt, Kbb, Kmm, wsbio4, sinksil , jpgsi, rfact2 ) 
     112      CALL trc_sink( kt, Kbb, Kmm, wsbio4, sinkcal , jpcal, rfact2 ) 
    112113 
    113114      IF( ln_p5z ) THEN 
     
    119120         !   Compute the sedimentation term using p4zsink2 for all the sinking particles 
    120121         !   ----------------------------------------------------- 
    121          CALL trc_sink( kt, wsbio3, sinkingn , jppon, rfact2 ) 
    122          CALL trc_sink( kt, wsbio3, sinkingp , jppop, rfact2 ) 
    123          CALL trc_sink( kt, wsbio4, sinking2n, jpgon, rfact2 ) 
    124          CALL trc_sink( kt, wsbio4, sinking2p, jpgop, rfact2 ) 
     122         CALL trc_sink( kt, Kbb, Kmm, wsbio3, sinkingn , jppon, rfact2 ) 
     123         CALL trc_sink( kt, Kbb, Kmm, wsbio3, sinkingp , jppop, rfact2 ) 
     124         CALL trc_sink( kt, Kbb, Kmm, wsbio4, sinking2n, jpgon, rfact2 ) 
     125         CALL trc_sink( kt, Kbb, Kmm, wsbio4, sinking2p, jpgop, rfact2 ) 
    125126      ENDIF 
    126127 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/PISCES/P4Z/p4zsms.F90

    r10963 r10966  
    4646CONTAINS 
    4747 
    48    SUBROUTINE p4z_sms( kt, Kmm ) 
     48   SUBROUTINE p4z_sms( kt, Kbb, Kmm ) 
    4949      !!--------------------------------------------------------------------- 
    5050      !!                     ***  ROUTINE p4z_sms  *** 
     
    5858      !!--------------------------------------------------------------------- 
    5959      ! 
    60       INTEGER, INTENT( in ) ::   kt      ! ocean time-step index       
    61       INTEGER, INTENT( in ) ::   Kmm     ! time level index 
     60      INTEGER, INTENT( in ) ::   kt           ! ocean time-step index       
     61      INTEGER, INTENT( in ) ::   Kbb, Kmm     ! time level index 
    6262      !! 
    6363      INTEGER ::   ji, jj, jk, jnt, jn, jl 
     
    111111      DO jnt = 1, nrdttrc          ! Potential time splitting if requested 
    112112         ! 
    113          CALL p4z_bio( kt, jnt )   ! Biology 
     113         CALL p4z_bio( kt, jnt, Kbb, Kmm )   ! Biology 
    114114         CALL p4z_lys( kt, jnt )   ! Compute CaCO3 saturation 
    115115         CALL p4z_sed( kt, jnt )   ! Surface and Bottom boundary conditions 
     
    149149      IF( l_trdtrc ) THEN 
    150150         DO jn = jp_pcs0, jp_pcs1 
    151            CALL trd_trc( tra(:,:,:,jn), jn, jptra_sms, kt )   ! save trends 
     151           CALL trd_trc( tra(:,:,:,jn), jn, jptra_sms, kt, Kmm )   ! save trends 
    152152         END DO 
    153153      END IF 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/PISCES/trcsms_pisces.F90

    r10963 r10966  
    2525CONTAINS 
    2626 
    27    SUBROUTINE trc_sms_pisces( kt, Kmm ) 
     27   SUBROUTINE trc_sms_pisces( kt, Kbb, Kmm ) 
    2828      !!--------------------------------------------------------------------- 
    2929      !!                     ***  ROUTINE trc_sms_pisces  *** 
     
    3434      !!--------------------------------------------------------------------- 
    3535      ! 
    36       INTEGER, INTENT( in ) ::   kt      ! ocean time-step index       
    37       INTEGER, INTENT( in ) ::   Kmm     ! time level index 
     36      INTEGER, INTENT( in ) ::   kt           ! ocean time-step index       
     37      INTEGER, INTENT( in ) ::   Kbb, Kmm     ! time level index 
    3838      !!--------------------------------------------------------------------- 
    3939      ! 
    40       IF( ln_p4z .OR. ln_p5z ) THEN  ;   CALL p4z_sms( kt, Kmm )   !  PISCES 
    41       ELSE                           ;   CALL p2z_sms( kt )   !  LOBSTER 
     40      IF( ln_p4z .OR. ln_p5z ) THEN  ;   CALL p4z_sms( kt, Kbb, Kmm )   !  PISCES 
     41      ELSE                           ;   CALL p2z_sms( kt,      Kmm )   !  LOBSTER 
    4242      ENDIF 
    4343 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trcadv.F90

    r10954 r10966  
    7474      !! ** Purpose :   compute the ocean tracer advection trend. 
    7575      !! 
    76       !! ** Method  : - Update after tracers (tra) with the advection term following nadv 
     76      !! ** Method  : - Update after tracers (tr(Krhs)) with the advection term following nadv 
    7777      !!---------------------------------------------------------------------- 
    7878      INTEGER                                   , INTENT(in)    :: kt   ! ocean time-step index 
     
    8282      INTEGER ::   jk   ! dummy loop index 
    8383      CHARACTER (len=22) ::   charout 
    84       REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zun, zvn, zwn  ! effective velocity 
     84      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zuu, zvv, zww  ! effective velocity 
    8585      !!---------------------------------------------------------------------- 
    8686      ! 
     
    8989      !                                         !==  effective transport  ==! 
    9090      IF( l_offline ) THEN 
    91          zun(:,:,:) = un(:,:,:)                    ! already in (un,vn,wn) 
    92          zvn(:,:,:) = vn(:,:,:) 
    93          zwn(:,:,:) = wn(:,:,:) 
     91         zuu(:,:,:) = uu(:,:,:,Kmm)                ! already in (uu(Kmm),vv(Kmm),ww) 
     92         zvv(:,:,:) = vv(:,:,:,Kmm) 
     93         zww(:,:,:) = ww(:,:,:) 
    9494      ELSE                                         ! build the effective transport 
    95          zun(:,:,jpk) = 0._wp 
    96          zvn(:,:,jpk) = 0._wp 
    97          zwn(:,:,jpk) = 0._wp 
     95         zuu(:,:,jpk) = 0._wp 
     96         zvv(:,:,jpk) = 0._wp 
     97         zww(:,:,jpk) = 0._wp 
    9898         IF( ln_wave .AND. ln_sdw )  THEN 
    9999            DO jk = 1, jpkm1                                                       ! eulerian transport + Stokes Drift 
    100                zun(:,:,jk) = e2u  (:,:) * e3u_n(:,:,jk) * ( un(:,:,jk) + usd(:,:,jk) ) 
    101                zvn(:,:,jk) = e1v  (:,:) * e3v_n(:,:,jk) * ( vn(:,:,jk) + vsd(:,:,jk) ) 
    102                zwn(:,:,jk) = e1e2t(:,:)                 * ( wn(:,:,jk) + wsd(:,:,jk) ) 
     100               zuu(:,:,jk) = e2u  (:,:) * e3u(:,:,jk,Kmm) * ( uu(:,:,jk,Kmm) + usd(:,:,jk) ) 
     101               zvv(:,:,jk) = e1v  (:,:) * e3v(:,:,jk,Kmm) * ( vv(:,:,jk,Kmm) + vsd(:,:,jk) ) 
     102               zww(:,:,jk) = e1e2t(:,:)                   * ( ww(:,:,jk) + wsd(:,:,jk) ) 
    103103            END DO 
    104104         ELSE 
    105105            DO jk = 1, jpkm1 
    106                zun(:,:,jk) = e2u  (:,:) * e3u_n(:,:,jk) * un(:,:,jk)                   ! eulerian transport 
    107                zvn(:,:,jk) = e1v  (:,:) * e3v_n(:,:,jk) * vn(:,:,jk) 
    108                zwn(:,:,jk) = e1e2t(:,:)                 * wn(:,:,jk) 
     106               zuu(:,:,jk) = e2u  (:,:) * e3u(:,:,jk,Kmm) * uu(:,:,jk,Kmm)                   ! eulerian transport 
     107               zvv(:,:,jk) = e1v  (:,:) * e3v(:,:,jk,Kmm) * vv(:,:,jk,Kmm) 
     108               zww(:,:,jk) = e1e2t(:,:)                   * ww(:,:,jk) 
    109109            END DO 
    110110         ENDIF 
    111111         ! 
    112112         IF( ln_vvl_ztilde .OR. ln_vvl_layer ) THEN                                 ! add z-tilde and/or vvl corrections 
    113             zun(:,:,:) = zun(:,:,:) + un_td(:,:,:) 
    114             zvn(:,:,:) = zvn(:,:,:) + vn_td(:,:,:) 
     113            zuu(:,:,:) = zuu(:,:,:) + un_td(:,:,:) 
     114            zvv(:,:,:) = zvv(:,:,:) + vn_td(:,:,:) 
    115115         ENDIF 
    116116         ! 
    117117         IF( ln_ldfeiv .AND. .NOT. ln_traldf_triad )   &  
    118             &              CALL ldf_eiv_trp( kt, nittrc000, zun, zvn, zwn, 'TRC', Kmm, Krhs )  ! add the eiv transport 
    119          ! 
    120          IF( ln_mle    )   CALL tra_mle_trp( kt, nittrc000, zun, zvn, zwn, 'TRC', Kmm       )  ! add the mle transport 
     118            &              CALL ldf_eiv_trp( kt, nittrc000, zuu, zvv, zww, 'TRC', Kmm, Krhs )  ! add the eiv transport 
     119         ! 
     120         IF( ln_mle    )   CALL tra_mle_trp( kt, nittrc000, zuu, zvv, zww, 'TRC', Kmm       )  ! add the mle transport 
    121121         ! 
    122122      ENDIF 
     
    125125      ! 
    126126      CASE ( np_CEN )                                 ! Centered : 2nd / 4th order 
    127          CALL tra_adv_cen( kt, nittrc000,'TRC',          zun, zvn, zwn,      Kmm, ptr, jptra, Krhs, nn_cen_h, nn_cen_v ) 
     127         CALL tra_adv_cen( kt, nittrc000,'TRC',          zuu, zvv, zww,      Kmm, ptr, jptra, Krhs, nn_cen_h, nn_cen_v ) 
    128128      CASE ( np_FCT )                                 ! FCT      : 2nd / 4th order 
    129          CALL tra_adv_fct( kt, nittrc000,'TRC', r2dttrc, zun, zvn, zwn, Kbb, Kmm, ptr, jptra, Krhs, nn_fct_h, nn_fct_v ) 
     129         CALL tra_adv_fct( kt, nittrc000,'TRC', r2dttrc, zuu, zvv, zww, Kbb, Kmm, ptr, jptra, Krhs, nn_fct_h, nn_fct_v ) 
    130130      CASE ( np_MUS )                                 ! MUSCL 
    131          CALL tra_adv_mus( kt, nittrc000,'TRC', r2dttrc, zun, zvn, zwn, Kbb, Kmm, ptr, jptra, Krhs, ln_mus_ups         )  
     131         CALL tra_adv_mus( kt, nittrc000,'TRC', r2dttrc, zuu, zvv, zww, Kbb, Kmm, ptr, jptra, Krhs, ln_mus_ups         )  
    132132      CASE ( np_UBS )                                 ! UBS 
    133          CALL tra_adv_ubs( kt, nittrc000,'TRC', r2dttrc, zun, zvn, zwn, Kbb, Kmm, ptr, jptra, Krhs, nn_ubs_v           ) 
     133         CALL tra_adv_ubs( kt, nittrc000,'TRC', r2dttrc, zuu, zvv, zww, Kbb, Kmm, ptr, jptra, Krhs, nn_ubs_v           ) 
    134134      CASE ( np_QCK )                                 ! QUICKEST 
    135          CALL tra_adv_qck( kt, nittrc000,'TRC', r2dttrc, zun, zvn, zwn, Kbb, Kmm, ptr, jptra, Krhs                     ) 
     135         CALL tra_adv_qck( kt, nittrc000,'TRC', r2dttrc, zuu, zvv, zww, Kbb, Kmm, ptr, jptra, Krhs                     ) 
    136136      ! 
    137137      END SELECT 
     
    140140         WRITE(charout, FMT="('adv ')") 
    141141         CALL prt_ctl_trc_info(charout) 
    142          CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 
     142         CALL prt_ctl_trc( tab4d=tr(:,:,:,:,Krhs), mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 
    143143      END IF 
    144144      ! 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trcbbl.F90

    r10954 r10966  
    6161      IF( l_trdtrc )  THEN 
    6262         ALLOCATE( ztrtrd(jpi,jpj,jpk,jptra) ) ! temporary save of trends 
    63          ztrtrd(:,:,:,:)  = tra(:,:,:,:) 
     63         ztrtrd(:,:,:,:)  = tr(:,:,:,:,Krhs) 
    6464      ENDIF 
    6565 
     
    6767      IF( nn_bbl_ldf == 1 ) THEN 
    6868         ! 
    69          CALL tra_bbl_dif( trb, tra, jptra, Kmm )   
     69         CALL tra_bbl_dif( tr(:,:,:,:,Kbb), tr(:,:,:,:,Krhs), jptra, Kmm )   
    7070         IF( ln_ctl )   THEN 
    7171            WRITE(charout, FMT="(' bbl_dif')")  ;  CALL prt_ctl_trc_info(charout) 
    72             CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 
     72            CALL prt_ctl_trc( tab4d=tr(:,:,:,:,Krhs), mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 
    7373         ENDIF 
    7474         ! 
     
    7878      IF( nn_bbl_adv /= 0 ) THEN 
    7979         ! 
    80          CALL tra_bbl_adv( trb, tra, jptra, Kmm )   
     80         CALL tra_bbl_adv( tr(:,:,:,:,Kbb), tr(:,:,:,:,Krhs), jptra, Kmm )   
    8181         IF( ln_ctl )   THEN 
    8282            WRITE(charout, FMT="(' bbl_adv')")  ;  CALL prt_ctl_trc_info(charout) 
    83             CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 
     83            CALL prt_ctl_trc( tab4d=tr(:,:,:,:,Krhs), mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 
    8484         ENDIF 
    8585         ! 
     
    8888      IF( l_trdtrc )   THEN                      ! save the horizontal diffusive trends for further diagnostics 
    8989        DO jn = 1, jptra 
    90            ztrtrd(:,:,:,jn) = tra(:,:,:,jn) - ztrtrd(:,:,:,jn) 
     90           ztrtrd(:,:,:,jn) = tr(:,:,:,jn,Krhs) - ztrtrd(:,:,:,jn) 
    9191           CALL trd_tra( kt, Kmm, Krhs, 'TRC', jn, jptra_bbl, ztrtrd(:,:,:,jn) ) 
    9292        END DO 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trcdmp.F90

    r10963 r10966  
    6363 
    6464 
    65    SUBROUTINE trc_dmp( kt, Kmm, Krhs ) 
     65   SUBROUTINE trc_dmp( kt, Kbb, Kmm, Krhs ) 
    6666      !!---------------------------------------------------------------------- 
    6767      !!                   ***  ROUTINE trc_dmp  *** 
     
    7373      !! ** Method  :   Newtonian damping towards trdta computed  
    7474      !!      and add to the general tracer trends: 
    75       !!                     trn = tra + restotr * (trdta - trb) 
     75      !!                     tr(Kmm) = tr(Krhs) + restotr * (trdta - tr(Kbb)) 
    7676      !!         The trend is computed either throughout the water column 
    7777      !!      (nlmdmptr=0) or in area of weak vertical mixing (nlmdmptr=1) or 
    7878      !!      below the well mixed layer (nlmdmptr=2) 
    7979      !! 
    80       !! ** Action  : - update the tracer trends tra with the newtonian  
     80      !! ** Action  : - update the tracer trends tr(:,:,:,:,Krhs) with the newtonian  
    8181      !!                damping trends. 
    8282      !!              - save the trends ('key_trdmxl_trc') 
    8383      !!---------------------------------------------------------------------- 
    84       INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    85       INTEGER, INTENT(in) ::   Kmm, Krhs  ! time level indices 
     84      INTEGER, INTENT(in) ::   kt              ! ocean time-step index 
     85      INTEGER, INTENT(in) ::   Kbb, Kmm, Krhs  ! time level indices 
    8686      ! 
    8787      INTEGER ::   ji, jj, jk, jn, jl   ! dummy loop indices 
     
    101101         DO jn = 1, jptra                                           ! tracer loop 
    102102            !                                                       ! =========== 
    103             IF( l_trdtrc ) ztrtrd(:,:,:) = tra(:,:,:,jn)    ! save trends  
     103            IF( l_trdtrc ) ztrtrd(:,:,:) = tr(:,:,:,jn,Krhs)    ! save trends  
    104104            ! 
    105105            IF( ln_trc_ini(jn) ) THEN      ! update passive tracers arrays with input data read from file 
     
    114114                     DO jj = 2, jpjm1 
    115115                        DO ji = fs_2, fs_jpim1   ! vector opt. 
    116                            tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - trb(ji,jj,jk,jn) ) 
     116                           tr(ji,jj,jk,jn,Krhs) = tr(ji,jj,jk,jn,Krhs) + restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - tr(ji,jj,jk,jn,Kbb) ) 
    117117                        END DO 
    118118                     END DO 
     
    124124                        DO ji = fs_2, fs_jpim1   ! vector opt. 
    125125                           IF( avt(ji,jj,jk) <= avt_c )  THEN  
    126                               tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - trb(ji,jj,jk,jn) ) 
     126                              tr(ji,jj,jk,jn,Krhs) = tr(ji,jj,jk,jn,Krhs) + restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - tr(ji,jj,jk,jn,Kbb) ) 
    127127                           ENDIF 
    128128                        END DO 
     
    134134                     DO jj = 2, jpjm1 
    135135                        DO ji = fs_2, fs_jpim1   ! vector opt. 
    136                            IF( gdept_n(ji,jj,jk) >= hmlp (ji,jj) ) THEN 
    137                               tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) + restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - trb(ji,jj,jk,jn) ) 
     136                           IF( gdept(ji,jj,jk,Kmm) >= hmlp (ji,jj) ) THEN 
     137                              tr(ji,jj,jk,jn,Krhs) = tr(ji,jj,jk,jn,Krhs) + restotr(ji,jj,jk) * ( ztrcdta(ji,jj,jk) - tr(ji,jj,jk,jn,Kbb) ) 
    138138                           END IF 
    139139                        END DO 
     
    146146            ! 
    147147            IF( l_trdtrc ) THEN 
    148                ztrtrd(:,:,:) = tra(:,:,:,jn) -  ztrtrd(:,:,:) 
     148               ztrtrd(:,:,:) = tr(:,:,:,jn,Krhs) -  ztrtrd(:,:,:) 
    149149               CALL trd_tra( kt, Kmm, Krhs, 'TRC', jn, jptra_dmp, ztrtrd ) 
    150150            END IF 
     
    160160         WRITE(charout, FMT="('dmp ')") 
    161161         CALL prt_ctl_trc_info(charout) 
    162          CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 
     162         CALL prt_ctl_trc( tab4d=tr(:,:,:,:,Krhs), mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 
    163163      ENDIF 
    164164      ! 
     
    225225 
    226226 
    227    SUBROUTINE trc_dmp_clo( kt, Kmm ) 
     227   SUBROUTINE trc_dmp_clo( kt, Kbb, Kmm ) 
    228228      !!--------------------------------------------------------------------- 
    229229      !!                  ***  ROUTINE trc_dmp_clo  *** 
     
    237237      !!                nctsi2(), nctsj2() : north-east Closed sea limits (i,j) 
    238238      !!---------------------------------------------------------------------- 
    239       INTEGER, INTENT( in ) ::   kt      ! ocean time-step index 
    240       INTEGER, INTENT( in ) ::   Kmm     ! time level indices 
     239      INTEGER, INTENT( in ) ::   kt           ! ocean time-step index 
     240      INTEGER, INTENT( in ) ::   Kbb, Kmm     ! time level indices 
    241241      ! 
    242242      INTEGER :: ji , jj, jk, jn, jl, jc                    ! dummy loop indicesa 
     
    361361                      DO jj = nctsj1(jc), nctsj2(jc) 
    362362                         DO ji = nctsi1(jc), nctsi2(jc) 
    363                             trn(ji,jj,jk,jn) = ztrcdta(ji,jj,jk) 
    364                             trb(ji,jj,jk,jn) = trn(ji,jj,jk,jn) 
     363                            tr(ji,jj,jk,jn,Kmm) = ztrcdta(ji,jj,jk) 
     364                            tr(ji,jj,jk,jn,Kbb) = tr(ji,jj,jk,jn,Kmm) 
    365365                         END DO 
    366366                      END DO 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trcldf.F90

    r10954 r10966  
    5151CONTAINS 
    5252 
    53    SUBROUTINE trc_ldf( kt, Kmm, Krhs ) 
     53   SUBROUTINE trc_ldf( kt, Kbb, Kmm, Krhs ) 
    5454      !!---------------------------------------------------------------------- 
    5555      !!                  ***  ROUTINE tra_ldf  *** 
     
    5858      !! 
    5959      !!---------------------------------------------------------------------- 
    60       INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
    61       INTEGER, INTENT( in ) ::   Kmm, Krhs  ! ocean time-level index 
     60      INTEGER, INTENT( in ) ::   kt              ! ocean time-step index 
     61      INTEGER, INTENT( in ) ::   Kbb, Kmm, Krhs  ! ocean time-level index 
    6262      ! 
    6363      INTEGER            :: ji, jj, jk, jn 
     
    7474      IF( l_trdtrc )  THEN 
    7575         ALLOCATE( ztrtrd(jpi,jpj,jpk,jptra) ) 
    76          ztrtrd(:,:,:,:)  = tra(:,:,:,:) 
     76         ztrtrd(:,:,:,:)  = tr(:,:,:,:,Krhs) 
    7777      ENDIF 
    7878      !                                  !* set the lateral diffusivity coef. for passive tracer       
     
    8383         DO jj = 1, jpj 
    8484            DO ji = 1, jpi 
    85                IF( gdept_n(ji,jj,jk) > 200. .AND. gphit(ji,jj) < 5. .AND. gphit(ji,jj) > -5. ) THEN 
    86                   zdep = MAX( gdept_n(ji,jj,jk) - 1000., 0. ) / 1000. 
     85               IF( gdept(ji,jj,jk,Kmm) > 200. .AND. gphit(ji,jj) < 5. .AND. gphit(ji,jj) > -5. ) THEN 
     86                  zdep = MAX( gdept(ji,jj,jk,Kmm) - 1000., 0. ) / 1000. 
    8787                  zahu(ji,jj,jk) = zahu(ji,jj,jk) * MAX( 1., rn_fact_lap * EXP( -zdep ) ) 
    8888               ENDIF 
     
    9393      SELECT CASE ( nldf_trc )                 !* compute lateral mixing trend and add it to the general trend 
    9494      ! 
    95       CASE ( np_lap   )                               ! iso-level laplacian 
    96          CALL tra_ldf_lap  ( kt, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi, trb,      tra, jptra,    1    , Kmm ) 
    97       CASE ( np_lap_i )                               ! laplacian : standard iso-neutral operator (Madec) 
    98          CALL tra_ldf_iso  ( kt, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi, trb, trb, tra, jptra,    1    , Kmm ) 
    99       CASE ( np_lap_it )                              ! laplacian : triad iso-neutral operator (griffies) 
    100          CALL tra_ldf_triad( kt, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi, trb, trb, tra, jptra,    1    , Kmm ) 
    101       CASE ( np_blp , np_blp_i , np_blp_it )          ! bilaplacian: all operator (iso-level, -neutral) 
    102          CALL tra_ldf_blp  ( kt, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi, trb     , tra, jptra, nldf_trc, Kmm ) 
     95      CASE ( np_lap   )                                                                                    ! iso-level laplacian 
     96         CALL tra_ldf_lap  ( kt, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi,               & 
     97           &                     tr(:,:,:,:,Kbb), tr(:,:,:,:,Krhs),                 jptra, 1 , Kmm ) 
     98      CASE ( np_lap_i )                                                                                    ! laplacian : standard iso-neutral operator (Madec) 
     99         CALL tra_ldf_iso  ( kt, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi,               & 
     100           &                     tr(:,:,:,:,Kbb), tr(:,:,:,:,Kbb), tr(:,:,:,:,Krhs), jptra, 1 , Kmm ) 
     101      CASE ( np_lap_it )                                                                                   ! laplacian : triad iso-neutral operator (griffies) 
     102         CALL tra_ldf_triad( kt, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi,               & 
     103           &                     tr(:,:,:,:,Kbb), tr(:,:,:,:,Kbb), tr(:,:,:,:,Krhs), jptra, 1 , Kmm ) 
     104      CASE ( np_blp , np_blp_i , np_blp_it )                                                               ! bilaplacian: all operator (iso-level, -neutral) 
     105         CALL tra_ldf_blp  ( kt, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi,               & 
     106           &                     tr(:,:,:,:,Kbb) , tr(:,:,:,:,Krhs),                 jptra, nldf_trc, Kmm ) 
    103107      END SELECT 
    104108      ! 
    105109      IF( l_trdtrc )   THEN                    ! send the trends for further diagnostics 
    106110        DO jn = 1, jptra 
    107            ztrtrd(:,:,:,jn) = tra(:,:,:,jn) - ztrtrd(:,:,:,jn) 
     111           ztrtrd(:,:,:,jn) = tr(:,:,:,jn,Krhs) - ztrtrd(:,:,:,jn) 
    108112           CALL trd_tra( kt, Kmm, Krhs, 'TRC', jn, jptra_ldf, ztrtrd(:,:,:,jn) ) 
    109113        END DO 
     
    114118         WRITE(charout, FMT="('ldf ')") 
    115119         CALL prt_ctl_trc_info(charout) 
    116          CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 
     120         CALL prt_ctl_trc( tab4d=tr(:,:,:,:,Krhs), mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 
    117121      ENDIF 
    118122      ! 
     
    168172      IF( ln_trcldf_OFF  ) THEN   ;   nldf_trc = np_no_ldf   ;   ioptio = ioptio + 1   ;   ENDIF 
    169173      IF( ln_trcldf_tra  ) THEN   ;   nldf_trc = nldf_tra    ;   ioptio = ioptio + 1   ;   ENDIF 
    170       IF( ioptio /=  1   )   CALL ctl_stop( 'trc_ldf_ini: use ONE of the 2 operator options (NONE/tra)' ) 
     174      IF( ioptio /=  1   )   CALL ctl_stop( 'trc_ldf_ini: use ONE of the 2 operator options (OFF/tra)' ) 
    171175       
    172176      !                                ! multiplier : passive/active tracers ration 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trcnxt.F90

    r10963 r10966  
    6161      !!      next time-step from their temporal trends and swap the fields. 
    6262      !!  
    63       !! ** Method  :   Apply lateral boundary conditions on (ua,va) through  
     63      !! ** Method  :   Apply lateral boundary conditions on (uu(Krhs),vv(Krhs)) through  
    6464      !!      call to lbc_lnk routine 
    6565      !!   default: 
    6666      !!      arrays swap 
    67       !!         (trn) = (tra) ; (tra) = (0,0) 
    68       !!         (trb) = (trn)  
     67      !!         (tr(Kmm)) = (tr(Krhs)) ; (tr(Krhs)) = (0,0) 
     68      !!         (tr(Kbb)) = (tr(Kmm))  
    6969      !! 
    7070      !!   For Arakawa or TVD Scheme :  
    71       !!      A Asselin time filter applied on now tracers (trn) to avoid 
     71      !!      A Asselin time filter applied on now tracers (tr(:,:,:,:,Kmm)) to avoid 
    7272      !!      the divergence of two consecutive time-steps and tr arrays 
    7373      !!      to prepare the next time_step: 
    74       !!         (trb) = (trn) + atfp [ (trb) + (tra) - 2 (trn) ] 
    75       !!         (trn) = (tra) ; (tra) = (0,0) 
    76       !! 
    77       !! 
    78       !! ** Action  : - update trb, trn 
     74      !!         (tr(Kbb)) = (tr(Kmm)) + atfp [ (tr(Kbb)) + (tr(Krhs)) - 2 (tr(Kmm)) ] 
     75      !!         (tr(Kmm)) = (tr(Krhs)) ; (tr(Krhs)) = (0,0) 
     76      !! 
     77      !! 
     78      !! ** Action  : - update tr(Kbb), tr(Kmm) 
    7979      !!---------------------------------------------------------------------- 
    8080      INTEGER, INTENT( in ) ::   kt     ! ocean time-step index 
     
    9898#endif 
    9999      ! Update after tracer on domain lateral boundaries 
    100       CALL lbc_lnk( 'trcnxt', tra(:,:,:,:), 'T', 1. )    
     100      CALL lbc_lnk( 'trcnxt', tr(:,:,:,:,Krhs), 'T', 1. )    
    101101 
    102102      IF( ln_bdy )  CALL trc_bdy( kt, Kbb, Kmm, Krhs ) 
     
    113113         ! total trend for the non-time-filtered variables.  
    114114         zfact = 1.0 / rdttrc 
    115          ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn cancel from tsn terms 
     115         ! G Nurser 23 Mar 2017. Recalculate trend as Delta(e3t*T)/e3tn; e3tn cancel from ts(Kmm) terms 
    116116         IF( ln_linssh ) THEN       ! linear sea surface height only 
    117117            DO jn = 1, jptra 
    118118               DO jk = 1, jpkm1 
    119                   ztrdt(:,:,jk,jn) = ( tra(:,:,jk,jn)*e3t_a(:,:,jk) / e3t_n(:,:,jk) - trn(:,:,jk,jn)) * zfact 
     119                  ztrdt(:,:,jk,jn) = ( tr(:,:,jk,jn,Krhs)*e3t(:,:,jk,Krhs) / e3t(:,:,jk,Kmm) - tr(:,:,jk,jn,Kmm)) * zfact 
    120120               END DO 
    121121            END DO 
     
    123123            DO jn = 1, jptra 
    124124               DO jk = 1, jpkm1 
    125                   ztrdt(:,:,jk,jn) = ( tra(:,:,jk,jn) - trn(:,:,jk,jn) ) * zfact 
     125                  ztrdt(:,:,jk,jn) = ( tr(:,:,jk,jn,Krhs) - tr(:,:,jk,jn,Kmm) ) * zfact 
    126126               END DO 
    127127            END DO 
     
    135135            ! Store now fields before applying the Asselin filter  
    136136            ! in order to calculate Asselin filter trend later. 
    137             ztrdt(:,:,:,:) = trn(:,:,:,:)  
     137            ztrdt(:,:,:,:) = tr(:,:,:,:,Kmm)  
    138138         ENDIF 
    139139 
     
    143143         DO jn = 1, jptra 
    144144            DO jk = 1, jpkm1 
    145                trn(:,:,jk,jn) = tra(:,:,jk,jn) 
    146                trb(:,:,jk,jn) = trn(:,:,jk,jn 
     145               tr(:,:,jk,jn,Kmm) = tr(:,:,jk,jn,Krhs) 
     146               tr(:,:,jk,jn,Kbb) = tr(:,:,jk,jn,Kmm 
    147147            END DO 
    148148         END DO 
     
    157157      ELSE      
    158158         IF( .NOT. l_offline ) THEN ! Leap-Frog + Asselin filter time stepping 
    159             IF( ln_linssh ) THEN   ;   CALL tra_nxt_fix( kt,      Kmm,       nittrc000,         'TRC', trb, trn, tra, jptra )  !     linear ssh 
    160             ELSE                   ;   CALL tra_nxt_vvl( kt, Kbb, Kmm, Krhs, nittrc000, rdttrc, 'TRC', trb, trn, tra,      & 
    161               &                                                                                   sbc_trc, sbc_trc_b, jptra )  ! non-linear ssh 
     159            IF( ln_linssh ) THEN   ;   CALL tra_nxt_fix( kt,      Kmm,       nittrc000,         'TRC',                & 
     160              &                                              tr(:,:,:,:,Kbb), tr(:,:,:,:,Kmm), tr(:,:,:,:,Krhs), jptra )  !     linear ssh 
     161            ELSE                   ;   CALL tra_nxt_vvl( kt, Kbb, Kmm, Krhs, nittrc000, rdttrc, 'TRC',                & 
     162              &                                              tr(:,:,:,:,Kbb), tr(:,:,:,:,Kmm), tr(:,:,:,:,Krhs),      & 
     163              &                                              sbc_trc, sbc_trc_b, jptra )                                  ! non-linear ssh 
    162164            ENDIF 
    163165         ELSE 
    164                                        CALL trc_nxt_off( kt )       ! offline  
    165          ENDIF 
    166          ! 
    167          CALL lbc_lnk_multi( 'trcnxt', trb(:,:,:,:), 'T', 1._wp, trn(:,:,:,:), 'T', 1._wp, tra(:,:,:,:), 'T', 1._wp ) 
     166                                       CALL trc_nxt_off( kt, Kbb, Kmm, Krhs )       ! offline  
     167         ENDIF 
     168         ! 
     169         CALL lbc_lnk_multi( 'trcnxt', tr(:,:,:,:,Kbb), 'T', 1._wp, tr(:,:,:,:,Kmm), 'T', 1._wp, tr(:,:,:,:,Krhs), 'T', 1._wp ) 
    168170      ENDIF 
    169171      ! 
     
    172174            DO jk = 1, jpkm1 
    173175               zfact = 1._wp / r2dttrc   
    174                ztrdt(:,:,jk,jn) = ( trb(:,:,jk,jn) - ztrdt(:,:,jk,jn) ) * zfact  
     176               ztrdt(:,:,jk,jn) = ( tr(:,:,jk,jn,Kbb) - ztrdt(:,:,jk,jn) ) * zfact  
    175177            END DO 
    176178            CALL trd_tra( kt, Kmm, Krhs, 'TRC', jn, jptra_atf, ztrdt(:,:,:,jn) ) 
     
    182184         WRITE(charout, FMT="('nxt')") 
    183185         CALL prt_ctl_trc_info(charout) 
    184          CALL prt_ctl_trc(tab4d=trn, mask=tmask, clinfo=ctrcnm) 
     186         CALL prt_ctl_trc(tab4d=tr(:,:,:,:,Kmm), mask=tmask, clinfo=ctrcnm) 
    185187      ENDIF 
    186188      ! 
     
    190192 
    191193 
    192    SUBROUTINE trc_nxt_off( kt ) 
     194   SUBROUTINE trc_nxt_off( kt, Kbb, Kmm, Krhs ) 
    193195      !!---------------------------------------------------------------------- 
    194196      !!                   ***  ROUTINE tra_nxt_vvl  *** 
     
    204206      !!                This can be summurized for tempearture as: 
    205207      !!             ztm = ( e3t_n*tn + rbcp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] )   ln_dynhpg_imp = T 
    206       !!                  /( e3t_n    + rbcp*[ e3t_b    - 2 e3t_n    + e3t_a    ] )    
     208      !!                  /( e3t(:,:,:,Kmm)    + rbcp*[ e3t(:,:,:,Kbb)    - 2 e3t(:,:,:,Kmm)    + e3t(:,:,:,Krhs)    ] )    
    207209      !!             ztm = 0                                                       otherwise 
    208210      !!             tb  = ( e3t_n*tn + atfp*[ e3t_b*tb - 2 e3t_n*tn + e3t_a*ta ] ) 
    209       !!                  /( e3t_n    + atfp*[ e3t_b    - 2 e3t_n    + e3t_a    ] ) 
     211      !!                  /( e3t(:,:,:,Kmm)    + atfp*[ e3t(:,:,:,Kbb)    - 2 e3t(:,:,:,Kmm)    + e3t(:,:,:,Krhs)    ] ) 
    210212      !!             tn  = ta  
    211213      !!             ta  = zt        (NB: reset to 0 after eos_bn2 call) 
     
    214216      !!              - (ta,sa) time averaged (t,s)   (ln_dynhpg_imp = T) 
    215217      !!---------------------------------------------------------------------- 
    216       INTEGER , INTENT(in   )   ::  kt       ! ocean time-step index 
     218      INTEGER, INTENT(in   )   ::  kt              ! ocean time-step index 
     219      INTEGER, INTENT(in   )   ::  Kbb, Kmm, Krhs  ! time level indices 
    217220      !!      
    218221      INTEGER  ::   ji, jj, jk, jn              ! dummy loop indices 
     
    236239            DO jj = 1, jpj 
    237240               DO ji = 1, jpi 
    238                   ze3t_b = e3t_b(ji,jj,jk) 
    239                   ze3t_n = e3t_n(ji,jj,jk) 
    240                   ze3t_a = e3t_a(ji,jj,jk) 
     241                  ze3t_b = e3t(ji,jj,jk,Kbb) 
     242                  ze3t_n = e3t(ji,jj,jk,Kmm) 
     243                  ze3t_a = e3t(ji,jj,jk,Krhs) 
    241244                  !                                         ! tracer content at Before, now and after 
    242                   ztc_b  = trb(ji,jj,jk,jn) * ze3t_b 
    243                   ztc_n  = trn(ji,jj,jk,jn) * ze3t_n 
    244                   ztc_a  = tra(ji,jj,jk,jn) * ze3t_a 
     245                  ztc_b  = tr(ji,jj,jk,jn,Kbb) * ze3t_b 
     246                  ztc_n  = tr(ji,jj,jk,jn,Kmm) * ze3t_n 
     247                  ztc_a  = tr(ji,jj,jk,jn,Krhs) * ze3t_a 
    245248                  ! 
    246249                  ze3t_d = ze3t_a - 2. * ze3t_n + ze3t_b 
     
    256259 
    257260                  ze3t_f = 1.e0 / ze3t_f 
    258                   trb(ji,jj,jk,jn) = ztc_f * ze3t_f       ! ptb <-- ptn filtered 
    259                   trn(ji,jj,jk,jn) = tra(ji,jj,jk,jn)     ! ptn <-- pta 
     261                  tr(ji,jj,jk,jn,Kbb) = ztc_f * ze3t_f           ! pt(:,:,:,:,Kbb) <-- pt(:,:,:,:,Kmm) filtered 
     262                  tr(ji,jj,jk,jn,Kmm) = tr(ji,jj,jk,jn,Krhs)     ! pt(:,:,:,:,Kmm) <-- pt(:,:,:,:,Krhs) 
    260263                  ! 
    261264               END DO 
     
    272275   !!---------------------------------------------------------------------- 
    273276CONTAINS 
    274    SUBROUTINE trc_nxt( kt 
     277   SUBROUTINE trc_nxt( kt, Kbb, Kmm, Krhs 
    275278      INTEGER, INTENT(in) :: kt 
     279      INTEGER, INTENT(in) :: Kbb, Kmm, Krhs  ! time level indices 
    276280      WRITE(*,*) 'trc_nxt: You should not have seen this print! error?', kt 
    277281   END SUBROUTINE trc_nxt 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trcrad.F90

    r10946 r10966  
    3737CONTAINS 
    3838 
    39    SUBROUTINE trc_rad( kt, Kmm, Krhs ) 
     39   SUBROUTINE trc_rad( kt, Kbb, Kmm, Krhs ) 
    4040      !!---------------------------------------------------------------------- 
    4141      !!                  ***  ROUTINE trc_rad  *** 
     
    5252      !!                (the total CFC content is not strictly preserved) 
    5353      !!---------------------------------------------------------------------- 
    54       INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    55       INTEGER, INTENT(in) ::   Kmm, Krhs  ! time level indices 
     54      INTEGER, INTENT(in) ::   kt              ! ocean time-step index 
     55      INTEGER, INTENT(in) ::   Kbb, Kmm, Krhs  ! time level indices 
    5656      ! 
    5757      CHARACTER (len=22) :: charout 
     
    6060      IF( ln_timing )   CALL timing_start('trc_rad') 
    6161      ! 
    62       IF( ln_age     )   CALL trc_rad_sms( kt, Kmm, Krhs, trb, trn, jp_age , jp_age                )  !  AGE 
    63       IF( ll_cfc     )   CALL trc_rad_sms( kt, Kmm, Krhs, trb, trn, jp_cfc0, jp_cfc1               )  !  CFC model 
    64       IF( ln_c14     )   CALL trc_rad_sms( kt, Kmm, Krhs, trb, trn, jp_c14 , jp_c14                )  !  C14 
    65       IF( ln_pisces  )   CALL trc_rad_sms( kt, Kmm, Krhs, trb, trn, jp_pcs0, jp_pcs1, cpreserv='Y' )  !  PISCES model 
    66       IF( ln_my_trc  )   CALL trc_rad_sms( kt, Kmm, Krhs, trb, trn, jp_myt0, jp_myt1               )  !  MY_TRC model 
     62      IF( ln_age     )   CALL trc_rad_sms( kt, Kmm, Krhs, tr(:,:,:,:,Kbb), tr(:,:,:,:,Kmm), jp_age , jp_age                )  !  AGE 
     63      IF( ll_cfc     )   CALL trc_rad_sms( kt, Kmm, Krhs, tr(:,:,:,:,Kbb), tr(:,:,:,:,Kmm), jp_cfc0, jp_cfc1               )  !  CFC model 
     64      IF( ln_c14     )   CALL trc_rad_sms( kt, Kmm, Krhs, tr(:,:,:,:,Kbb), tr(:,:,:,:,Kmm), jp_c14 , jp_c14                )  !  C14 
     65      IF( ln_pisces  )   CALL trc_rad_sms( kt, Kmm, Krhs, tr(:,:,:,:,Kbb), tr(:,:,:,:,Kmm), jp_pcs0, jp_pcs1, cpreserv='Y' )  !  PISCES model 
     66      IF( ln_my_trc  )   CALL trc_rad_sms( kt, Kmm, Krhs, tr(:,:,:,:,Kbb), tr(:,:,:,:,Kmm), jp_myt0, jp_myt1               )  !  MY_TRC model 
    6767      ! 
    6868      IF(ln_ctl) THEN      ! print mean trends (used for debugging) 
    6969         WRITE(charout, FMT="('rad')") 
    7070         CALL prt_ctl_trc_info( charout ) 
    71          CALL prt_ctl_trc( tab4d=trn, mask=tmask, clinfo=ctrcnm ) 
     71         CALL prt_ctl_trc( tab4d=tr(:,:,:,:,Kmm), mask=tmask, clinfo=ctrcnm ) 
    7272      ENDIF 
    7373      ! 
     
    160160         DO jn = jp_sms0, jp_sms1 
    161161            ! 
    162             IF( l_trdtrc )   ztrtrd(:,:,:) = ptrb(:,:,:,jn)                            ! save input trb for trend computation            
     162            IF( l_trdtrc )   ztrtrd(:,:,:) = ptrb(:,:,:,jn)                            ! save input tr(:,:,:,:,Kbb) for trend computation            
    163163            ! 
    164164            DO jk = 1, jpkm1 
     
    210210         DO jn = jp_sms0, jp_sms1 
    211211            ! 
    212             IF( l_trdtrc )   ztrtrd(:,:,:) = ptrn(:,:,:,jn)                            ! save input trb for trend computation 
     212            IF( l_trdtrc )   ztrtrd(:,:,:) = ptrn(:,:,:,jn)                            ! save input tr for trend computation 
    213213            ! 
    214214            DO jk = 1, jpkm1 
     
    257257         DO jn = jp_sms0, jp_sms1   
    258258            ! 
    259             IF( l_trdtrc )   ztrtrd(:,:,:) = ptrb(:,:,:,jn)                        ! save input trb for trend computation 
     259            IF( l_trdtrc )   ztrtrd(:,:,:) = ptrb(:,:,:,jn)                        ! save input tr for trend computation 
    260260            ! 
    261261            WHERE( ptrb(:,:,:,jn) < 0. )   ptrb(:,:,:,jn) = 0. 
     
    266266            ENDIF 
    267267            ! 
    268             IF( l_trdtrc )   ztrtrd(:,:,:) = ptrn(:,:,:,jn)                        ! save input trn for trend computation 
     268            IF( l_trdtrc )   ztrtrd(:,:,:) = ptrn(:,:,:,jn)                        ! save input tr for trend computation 
    269269            ! 
    270270            WHERE( ptrn(:,:,:,jn) < 0. )   ptrn(:,:,:,jn) = 0. 
     
    288288   !!---------------------------------------------------------------------- 
    289289CONTAINS 
    290    SUBROUTINE trc_rad( kt )              ! Empty routine 
     290   SUBROUTINE trc_rad( kt, Kbb, Kmm, Krhs )              ! Empty routine 
    291291      INTEGER, INTENT(in) ::   kt 
     292      INTEGER, INTENT(in) ::   Kbb, Kmm, Krhs  ! time level indices 
    292293      WRITE(*,*) 'trc_rad: You should not have seen this print! error?', kt 
    293294   END SUBROUTINE trc_rad 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trcsbc.F90

    r10946 r10966  
    4949      !!            The surface freshwater flux modify the ocean volume 
    5050      !!         and thus the concentration of a tracer as : 
    51       !!            tra = tra + emp * trn / e3t   for k=1 
     51      !!            tr(Krhs) = tr(Krhs) + emp * tr(Kmm) / e3t   for k=1 
    5252      !!         where emp, the surface freshwater budget (evaporation minus 
    5353      !!         precipitation ) given in kg/m2/s is divided 
    5454      !!         by 1035 kg/m3 (density of ocean water) to obtain m/s. 
    5555      !! 
    56       !! ** Action  : - Update the 1st level of tra with the trend associated 
     56      !! ** Action  : - Update the 1st level of tr(:,:,:,:,Krhs) with the trend associated 
    5757      !!                with the tracer surface boundary condition  
    5858      !! 
     
    103103      ENDIF 
    104104 
    105       ! Coupling online : river runoff is added to the horizontal divergence (hdivn) in the subroutine sbc_rnf_div  
     105      ! Coupling online : river runoff is added to the horizontal divergence (hdiv) in the subroutine sbc_rnf_div  
    106106      ! one only consider the concentration/dilution effect due to evaporation minus precipitation + freezing/melting of sea-ice 
    107107      ! Coupling offline : runoff are in emp which contains E-P-R 
     
    119119            DO jj = 2, jpj 
    120120               DO ji = fs_2, fs_jpim1   ! vector opt. 
    121                   sbc_trc(ji,jj,jn) = zsfx(ji,jj) * r1_rau0 * trn(ji,jj,1,jn) 
     121                  sbc_trc(ji,jj,jn) = zsfx(ji,jj) * r1_rau0 * tr(ji,jj,1,jn,Kmm) 
    122122               END DO 
    123123            END DO 
     
    129129            DO jj = 2, jpj 
    130130               DO ji = fs_2, fs_jpim1   ! vector opt. 
    131                   zse3t = 1. / e3t_n(ji,jj,1) 
     131                  zse3t = 1. / e3t(ji,jj,1,Kmm) 
    132132                  ! tracer flux at the ice/ocean interface (tracer/m2/s) 
    133133                  zftra = - trc_i(ji,jj,jn) * fmmflx(ji,jj) ! uptake of tracer in the sea ice 
     
    138138                  ztfx  = zftra                             ! net tracer flux 
    139139                  ! 
    140                   zdtra = r1_rau0 * ( ztfx + zsfx(ji,jj) * trn(ji,jj,1,jn) )  
     140                  zdtra = r1_rau0 * ( ztfx + zsfx(ji,jj) * tr(ji,jj,1,jn,Kmm) )  
    141141                  IF ( zdtra < 0. ) THEN 
    142                      zratio = -zdtra * zse3t * r2dttrc / ( trn(ji,jj,1,jn) + zrtrn ) 
     142                     zratio = -zdtra * zse3t * r2dttrc / ( tr(ji,jj,1,jn,Kmm) + zrtrn ) 
    143143                     zdtra = MIN(1.0, zratio) * zdtra ! avoid negative concentrations to arise 
    144144                  ENDIF 
     
    153153      DO jn = 1, jptra 
    154154         ! 
    155          IF( l_trdtrc )   ztrtrd(:,:,:) = tra(:,:,:,jn)  ! save trends 
     155         IF( l_trdtrc )   ztrtrd(:,:,:) = tr(:,:,:,jn,Krhs)  ! save trends 
    156156         ! 
    157157         DO jj = 2, jpj 
    158158            DO ji = fs_2, fs_jpim1   ! vector opt. 
    159                zse3t = zfact / e3t_n(ji,jj,1) 
    160                tra(ji,jj,1,jn) = tra(ji,jj,1,jn) + ( sbc_trc_b(ji,jj,jn) + sbc_trc(ji,jj,jn) ) * zse3t 
     159               zse3t = zfact / e3t(ji,jj,1,Kmm) 
     160               tr(ji,jj,1,jn,Krhs) = tr(ji,jj,1,jn,Krhs) + ( sbc_trc_b(ji,jj,jn) + sbc_trc(ji,jj,jn) ) * zse3t 
    161161            END DO 
    162162         END DO 
    163163         ! 
    164164         IF( l_trdtrc ) THEN 
    165             ztrtrd(:,:,:) = tra(:,:,:,jn) - ztrtrd(:,:,:) 
     165            ztrtrd(:,:,:) = tr(:,:,:,jn,Krhs) - ztrtrd(:,:,:) 
    166166            CALL trd_tra( kt, Kmm, Krhs, 'TRC', jn, jptra_nsr, ztrtrd ) 
    167167         END IF 
     
    184184      IF( ln_ctl )   THEN 
    185185         WRITE(charout, FMT="('sbc ')") ;  CALL prt_ctl_trc_info(charout) 
    186                                            CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 
     186                                           CALL prt_ctl_trc( tab4d=tr(:,:,:,:,Krhs), mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 
    187187      ENDIF 
    188188      IF( l_trdtrc )  DEALLOCATE( ztrtrd ) 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trcsink.F90

    r10376 r10966  
    3535   !!---------------------------------------------------------------------- 
    3636 
    37    SUBROUTINE trc_sink ( kt, pwsink, psinkflx, jp_tra, rsfact ) 
     37   SUBROUTINE trc_sink ( kt, Kbb, Kmm, pwsink, psinkflx, jp_tra, rsfact ) 
    3838      !!--------------------------------------------------------------------- 
    3939      !!                     ***  ROUTINE trc_sink  *** 
     
    4545      !!--------------------------------------------------------------------- 
    4646      INTEGER , INTENT(in)  :: kt 
     47      INTEGER , INTENT(in)  :: Kbb, Kmm 
    4748      INTEGER , INTENT(in)  :: jp_tra    ! tracer index index       
    4849      REAL(wp), INTENT(in)  :: rsfact    ! time step duration 
     
    7576               DO jk = 1, jpkm1 
    7677                  IF( tmask(ji,jj,jk) == 1.0 ) THEN 
    77                       zwsmax =  0.5 * e3t_n(ji,jj,jk) * rday / rsfact 
     78                      zwsmax =  0.5 * e3t(ji,jj,jk,Kmm) * rday / rsfact 
    7879                      iiter(ji,jj) =  MAX( iiter(ji,jj), INT( pwsink(ji,jj,jk) / zwsmax ) ) 
    7980                  ENDIF 
     
    8889            DO ji = 1, jpi 
    8990               IF( tmask(ji,jj,jk) == 1 ) THEN 
    90                  zwsmax = 0.5 * e3t_n(ji,jj,jk) * rday / rsfact 
     91                 zwsmax = 0.5 * e3t(ji,jj,jk,Kmm) * rday / rsfact 
    9192                 zwsink(ji,jj,jk) = MIN( pwsink(ji,jj,jk), zwsmax * REAL( iiter(ji,jj), wp ) ) 
    9293               ENDIF 
     
    101102      !   Compute the sedimentation term using trc_sink2 for the considered sinking particle 
    102103      !   ----------------------------------------------------- 
    103       CALL trc_sink2( zwsink, psinkflx, jp_tra, iiter, rsfact ) 
     104      CALL trc_sink2( Kbb, Kmm, zwsink, psinkflx, jp_tra, iiter, rsfact ) 
    104105      ! 
    105106      IF( ln_timing )   CALL timing_stop('trc_sink') 
     
    107108   END SUBROUTINE trc_sink 
    108109 
    109    SUBROUTINE trc_sink2( pwsink, psinkflx, jp_tra, kiter, rsfact ) 
     110   SUBROUTINE trc_sink2( Kbb, Kmm, pwsink, psinkflx, jp_tra, kiter, rsfact ) 
    110111      !!--------------------------------------------------------------------- 
    111112      !!                     ***  ROUTINE trc_sink2  *** 
     
    118119      !!      transport term, i.e.  div(u*tra). 
    119120      !!--------------------------------------------------------------------- 
     121      INTEGER,  INTENT(in   )                         ::   Kbb, Kmm  ! time level indices 
    120122      INTEGER,  INTENT(in   )                         ::   jp_tra    ! tracer index index       
    121123      REAL(wp), INTENT(in   )                         ::   rsfact    ! duration of time step 
     
    133135      ztraz(:,:,:) = 0.e0 
    134136      zakz (:,:,:) = 0.e0 
    135       ztrb (:,:,:) = trb(:,:,:,jp_tra) 
     137      ztrb (:,:,:) = tr(:,:,:,jp_tra,Kbb) 
    136138 
    137139      DO jk = 1, jpkm1 
     
    150152               !               
    151153               DO jk = 2, jpkm1 
    152                   ztraz(ji,jj,jk) = ( trb(ji,jj,jk-1,jp_tra) - trb(ji,jj,jk,jp_tra) ) * tmask(ji,jj,jk) 
     154                  ztraz(ji,jj,jk) = ( tr(ji,jj,jk-1,jp_tra,Kbb) - tr(ji,jj,jk,jp_tra,Kbb) ) * tmask(ji,jj,jk) 
    153155               END DO 
    154156               ztraz(ji,jj,1  ) = 0.0 
     
    169171               ! vertical advective flux 
    170172               DO jk = 1, jpkm1 
    171                   zigma = zwsink2(ji,jj,jk+1) * zstep / e3w_n(ji,jj,jk+1) 
     173                  zigma = zwsink2(ji,jj,jk+1) * zstep / e3w(ji,jj,jk+1,Kmm) 
    172174                  zew   = zwsink2(ji,jj,jk+1) 
    173                   psinkflx(ji,jj,jk+1) = -zew * ( trb(ji,jj,jk,jp_tra) - 0.5 * ( 1 + zigma ) * zakz(ji,jj,jk) ) * zstep 
     175                  psinkflx(ji,jj,jk+1) = -zew * ( tr(ji,jj,jk,jp_tra,Kbb) - 0.5 * ( 1 + zigma ) * zakz(ji,jj,jk) ) * zstep 
    174176               END DO 
    175177               ! 
     
    179181          
    180182               DO jk=1,jpkm1 
    181                   zflx = ( psinkflx(ji,jj,jk) - psinkflx(ji,jj,jk+1) ) / e3t_n(ji,jj,jk) 
    182                   trb(ji,jj,jk,jp_tra) = trb(ji,jj,jk,jp_tra) + zflx 
     183                  zflx = ( psinkflx(ji,jj,jk) - psinkflx(ji,jj,jk+1) ) / e3t(ji,jj,jk,Kmm) 
     184                  tr(ji,jj,jk,jp_tra,Kbb) = tr(ji,jj,jk,jp_tra,Kbb) + zflx 
    183185               END DO 
    184186            END DO 
     
    189191         DO jj = 1,jpj 
    190192            DO ji = 1, jpi 
    191                zflx = ( psinkflx(ji,jj,jk) - psinkflx(ji,jj,jk+1) ) / e3t_n(ji,jj,jk) 
     193               zflx = ( psinkflx(ji,jj,jk) - psinkflx(ji,jj,jk+1) ) / e3t(ji,jj,jk,Kmm) 
    192194               ztrb(ji,jj,jk) = ztrb(ji,jj,jk) + 2. * zflx 
    193195            END DO 
     
    195197      END DO 
    196198 
    197       trb(:,:,:,jp_tra) = ztrb(:,:,:) 
     199      tr(:,:,:,jp_tra,Kbb) = ztrb(:,:,:) 
    198200      psinkflx(:,:,:)   = 2. * psinkflx(:,:,:) 
    199201      ! 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trctrp.F90

    r10963 r10966  
    6161      IF( .NOT. lk_c1d ) THEN 
    6262         ! 
    63                                 CALL trc_sbc    ( kt, Kmm, Krhs )      ! surface boundary condition 
    64          IF( ln_trabbl )        CALL trc_bbl    ( kt, Kbb, Kmm, Krhs ) ! advective (and/or diffusive) bottom boundary layer scheme 
    65          IF( ln_trcdmp )        CALL trc_dmp    ( kt, Kmm, Krhs )      ! internal damping trends 
    66          IF( ln_bdy )           CALL trc_bdy_dmp( kt, Kbb,      Krhs ) ! BDY damping trends 
    67                                 CALL trc_adv    ( kt, Kbb, Kmm, tr, Krhs )      ! horizontal & vertical advection  
    68          !                                                             ! Partial top/bottom cell: GRADh( trb 
     63                                CALL trc_sbc    ( kt,      Kmm, Krhs )      ! surface boundary condition 
     64         IF( ln_trabbl )        CALL trc_bbl    ( kt, Kbb, Kmm, Krhs )      ! advective (and/or diffusive) bottom boundary layer scheme 
     65         IF( ln_trcdmp )        CALL trc_dmp    ( kt, Kbb, Kmm, Krhs )      ! internal damping trends 
     66         IF( ln_bdy )           CALL trc_bdy_dmp( kt, Kbb,      Krhs )      ! BDY damping trends 
     67                                CALL trc_adv    ( kt, Kbb, Kmm, tr, Krhs )  ! horizontal & vertical advection  
     68         !                                                             ! Partial top/bottom cell: GRADh( tr(Kbb) 
    6969         IF( ln_zps ) THEN 
    70            IF( ln_isfcav ) THEN ; CALL zps_hde_isf( kt, Kmm, jptra, trb, pgtu=gtru, pgtv=gtrv, pgtui=gtrui, pgtvi=gtrvi )  ! both top & bottom 
    71            ELSE                 ; CALL zps_hde    ( kt, Kmm, jptra, trb, gtru, gtrv )                                      !  only bottom 
     70           IF( ln_isfcav ) THEN ; CALL zps_hde_isf( kt, Kmm, jptra, tr(:,:,:,:,Kbb), pgtu=gtru, pgtv=gtrv, pgtui=gtrui, pgtvi=gtrvi )  ! both top & bottom 
     71           ELSE                 ; CALL zps_hde    ( kt, Kmm, jptra, tr(:,:,:,:,Kbb), gtru, gtrv )                                      !  only bottom 
    7272           ENDIF 
    7373         ENDIF 
    7474         !                                                       
    75                                 CALL trc_ldf    ( kt, Kmm, Krhs ) ! lateral mixing 
     75                                CALL trc_ldf    ( kt, Kbb, Kmm, Krhs )    ! lateral mixing 
    7676#if defined key_agrif 
    7777         IF(.NOT. Agrif_Root()) CALL Agrif_Sponge_trc       ! tracers sponge 
    7878#endif 
    79                                 CALL trc_zdf( kt, Kbb, Kmm, Krhs, tr, Kaa  )  ! vert. mixing & after tracer ==> after 
    80                                 CALL trc_nxt    ( kt, Kbb, Kmm, Krhs )        ! tracer fields at next time step      
    81          IF( ln_trcrad )        CALL trc_rad    ( kt, Kmm, Krhs )             ! Correct artificial negative concentrations 
    82          IF( ln_trcdmp_clo )    CALL trc_dmp_clo( kt, Kmm )                   ! internal damping trends on closed seas only 
     79                                CALL trc_zdf    ( kt, Kbb, Kmm, Krhs, tr, Kaa  )  ! vert. mixing & after tracer   ==> after 
     80                                CALL trc_nxt    ( kt, Kbb, Kmm, Krhs )            ! tracer fields at next time step      
     81         IF( ln_trcrad )        CALL trc_rad    ( kt, Kbb, Kmm, Krhs )            ! Correct artificial negative concentrations 
     82         IF( ln_trcdmp_clo )    CALL trc_dmp_clo( kt, Kbb, Kmm )                  ! internal damping trends on closed seas only 
    8383 
    8484         ! 
    8585      ELSE                                               ! 1D vertical configuration 
    86                                 CALL trc_sbc( kt, Kmm, Krhs )            ! surface boundary condition 
    87          IF( ln_trcdmp )        CALL trc_dmp( kt, Kmm, Krhs )            ! internal damping trends 
     86                                CALL trc_sbc( kt,      Kmm, Krhs )            ! surface boundary condition 
     87         IF( ln_trcdmp )        CALL trc_dmp( kt, Kbb, Kmm, Krhs )            ! internal damping trends 
    8888                                CALL trc_zdf( kt, Kbb, Kmm, Krhs, tr, Kaa  )  ! vert. mixing & after tracer ==> after 
    89                                 CALL trc_nxt( kt, Kbb, Kmm, Krhs )       ! tracer fields at next time step      
    90           IF( ln_trcrad )       CALL trc_rad( kt, Kmm, Krhs )            ! Correct artificial negative concentrations 
     89                                CALL trc_nxt( kt, Kbb, Kmm, Krhs )            ! tracer fields at next time step      
     90          IF( ln_trcrad )       CALL trc_rad( kt, Kbb, Kmm, Krhs )            ! Correct artificial negative concentrations 
    9191         ! 
    9292      END IF 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trczdf.F90

    r10946 r10966  
    7070         WRITE(charout, FMT="('zdf ')") 
    7171         CALL prt_ctl_trc_info(charout) 
    72          CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 
     72         CALL prt_ctl_trc( tab4d=tr(:,:,:,:,Kaa), mask=tmask, clinfo=ctrcnm, clinfo2='trd' ) 
    7373      END IF 
    7474      ! 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trdmxl_trc.F90

    r10425 r10966  
    1616   !!   trd_mxl_trc_init : initialization step 
    1717   !!---------------------------------------------------------------------- 
    18    USE trc               ! tracer definitions (trn, trb, tra, etc.) 
     18   USE trc               ! tracer definitions (tr etc.) 
    1919   USE trc_oce, ONLY :   nn_dttrc  ! frequency of step on passive tracers 
    2020   USE dom_oce           ! domain definition 
     
    7070 
    7171 
    72    SUBROUTINE trd_mxl_trc_zint( ptrc_trdmxl, ktrd, ctype, kjn ) 
     72   SUBROUTINE trd_mxl_trc_zint( ptrc_trdmxl, ktrd, ctype, kjn, Kmm ) 
    7373      !!---------------------------------------------------------------------- 
    7474      !!                  ***  ROUTINE trd_mxl_trc_zint  *** 
     
    9292      !! 
    9393      INTEGER, INTENT( in ) ::   ktrd, kjn                        ! ocean trend index and passive tracer rank 
     94      INTEGER, INTENT( in ) ::   Kmm                              ! time level index 
    9495      CHARACTER(len=2), INTENT( in ) ::  ctype                    ! surface/bottom (2D) or interior (3D) physics 
    9596      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( in ) ::  ptrc_trdmxl ! passive tracer trend 
     
    150151            DO jj = 1, jpj 
    151152               DO ji = 1, jpi 
    152                   IF( jk - nmld_trc(ji,jj) < 0 )   wkx_trc(ji,jj,jk) = e3t_n(ji,jj,jk) * tmask(ji,jj,jk) 
     153                  IF( jk - nmld_trc(ji,jj) < 0 )   wkx_trc(ji,jj,jk) = e3t(ji,jj,jk,Kmm) * tmask(ji,jj,jk) 
    153154               END DO 
    154155            END DO 
     
    183184 
    184185 
    185    SUBROUTINE trd_mxl_trc( kt ) 
     186   SUBROUTINE trd_mxl_trc( kt, Kmm ) 
    186187      !!---------------------------------------------------------------------- 
    187188      !!                  ***  ROUTINE trd_mxl_trc  *** 
     
    232233      ! 
    233234      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
     235      INTEGER, INTENT(in) ::   Kmm                              ! time level index 
    234236      ! 
    235237      INTEGER ::   ji, jj, jk, jl, ik, it, itmod, jn 
     
    267269                  ik = nmld_trc(ji,jj) 
    268270                  IF( ln_trdtrc(jn) )    & 
    269                   tmltrd_trc(ji,jj,jpmxl_trc_zdf,jn) = - avs(ji,jj,ik) / e3w_n(ji,jj,ik) * tmask(ji,jj,ik)  & 
    270                        &                    * ( trn(ji,jj,ik-1,jn) - trn(ji,jj,ik,jn) )            & 
     271                  tmltrd_trc(ji,jj,jpmxl_trc_zdf,jn) = - avs(ji,jj,ik) / e3w(ji,jj,ik,Kmm) * tmask(ji,jj,ik)  & 
     272                       &                    * ( tr(ji,jj,ik-1,jn,Kmm) - tr(ji,jj,ik,jn,Kmm) )            & 
    271273                       &                    / MAX( 1., rmld_trc(ji,jj) ) * tmask(ji,jj,1) 
    272274               END DO 
     
    322324         DO jn = 1, jptra 
    323325            IF( ln_trdtrc(jn) ) & 
    324                tml_trc(:,:,jn) = tml_trc(:,:,jn) + wkx_trc(:,:,jk) * trn(:,:,jk,jn) 
     326               tml_trc(:,:,jn) = tml_trc(:,:,jn) + wkx_trc(:,:,jk) * tr(:,:,jk,jn,Kmm) 
    325327         END DO 
    326328      END DO 
     
    970972   !!---------------------------------------------------------------------- 
    971973CONTAINS 
    972    SUBROUTINE trd_mxl_trc( kt )                                   ! Empty routine 
     974   SUBROUTINE trd_mxl_trc( kt, Kmm )                                   ! Empty routine 
    973975      INTEGER, INTENT( in) ::   kt 
     976      INTEGER, INTENT( in) ::   Kmm            ! time level index 
    974977      WRITE(*,*) 'trd_mxl_trc: You should not have seen this print! error?', kt 
    975978   END SUBROUTINE trd_mxl_trc 
    976    SUBROUTINE trd_mxl_trc_zint( ptrc_trdmxl, ktrd, ctype, kjn ) 
     979   SUBROUTINE trd_mxl_trc_zint( ptrc_trdmxl, ktrd, ctype, kjn, Kmm ) 
    977980      INTEGER               , INTENT( in ) ::  ktrd, kjn              ! ocean trend index and passive tracer rank 
     981      INTEGER               , INTENT( in ) ::  Kmm                    ! time level index 
    978982      CHARACTER(len=2)      , INTENT( in ) ::  ctype                  ! surface/bottom (2D) or interior (3D) physics 
    979983      REAL, DIMENSION(:,:,:), INTENT( in ) ::  ptrc_trdmxl            ! passive trc trend 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trdtrc.F90

    r10096 r10966  
    1313   !!   trdtrc      : passive tracer trends  
    1414   !!---------------------------------------------------------------------- 
    15    USE trc               ! tracer definitions (trn, trb, tra, etc.) 
     15   USE trc               ! tracer definitions (tr(:,:,:,:,Kmm), tr(:,:,:,:,Kbb), tr(:,:,:,:,Krhs), etc.) 
    1616   USE trd_oce 
    1717   USE trdtrc_oce       ! definition of main arrays used for trends computations 
     
    3232CONTAINS 
    3333 
    34    SUBROUTINE trd_trc( ptrtrd, kjn, ktrd, kt ) 
     34   SUBROUTINE trd_trc( ptrtrd, kjn, ktrd, kt, Kmm ) 
    3535      !!---------------------------------------------------------------------- 
    3636      !!                  ***  ROUTINE trd_trc  *** 
    3737      !!---------------------------------------------------------------------- 
    3838      INTEGER, INTENT( in )  ::   kt                                  ! time step 
     39      INTEGER, INTENT( in )  ::   Kmm                                 ! time level index 
    3940      INTEGER, INTENT( in )  ::   kjn                                 ! tracer index 
    4041      INTEGER, INTENT( in )  ::   ktrd                                ! tracer trend index 
     
    5657         ! 
    5758         SELECT CASE ( ktrd ) 
    58          CASE ( jptra_xad     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_xad, '3D', kjn ) 
    59          CASE ( jptra_yad     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_yad, '3D', kjn ) 
    60          CASE ( jptra_zad     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_zad, '3D', kjn ) 
    61          CASE ( jptra_ldf     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_ldf, '3D', kjn ) 
    62          CASE ( jptra_bbl     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_bbl, '3D', kjn ) 
     59         CASE ( jptra_xad     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_xad, '3D', kjn, Kmm ) 
     60         CASE ( jptra_yad     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_yad, '3D', kjn, Kmm ) 
     61         CASE ( jptra_zad     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_zad, '3D', kjn, Kmm ) 
     62         CASE ( jptra_ldf     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_ldf, '3D', kjn, Kmm ) 
     63         CASE ( jptra_bbl     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_bbl, '3D', kjn, Kmm ) 
    6364         CASE ( jptra_zdf     ) 
    6465            IF( ln_trcldf_iso ) THEN 
    65                CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_ldf, '3D', kjn ) 
     66               CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_ldf, '3D', kjn, Kmm ) 
    6667            ELSE 
    67                CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_zdf, '3D', kjn ) 
     68               CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_zdf, '3D', kjn, Kmm ) 
    6869            ENDIF 
    69          CASE ( jptra_dmp     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_dmp , '3D', kjn ) 
    70          CASE ( jptra_nsr     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_sbc , '2D', kjn ) 
    71          CASE ( jptra_sms     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_sms , '3D', kjn ) 
    72          CASE ( jptra_radb    )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_radb, '3D', kjn ) 
    73          CASE ( jptra_radn    )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_radn, '3D', kjn ) 
    74          CASE ( jptra_atf     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_atf , '3D', kjn ) 
     70         CASE ( jptra_dmp     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_dmp , '3D', kjn, Kmm ) 
     71         CASE ( jptra_nsr     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_sbc , '2D', kjn, Kmm ) 
     72         CASE ( jptra_sms     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_sms , '3D', kjn, Kmm ) 
     73         CASE ( jptra_radb    )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_radb, '3D', kjn, Kmm ) 
     74         CASE ( jptra_radn    )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_radn, '3D', kjn, Kmm ) 
     75         CASE ( jptra_atf     )   ;   CALL trd_mxl_trc_zint( ptrtrd, jpmxl_trc_atf , '3D', kjn, Kmm ) 
    7576         END SELECT 
    7677         ! 
     
    110111CONTAINS 
    111112 
    112    SUBROUTINE trd_trc( ptrtrd, kjn, ktrd, kt ) 
     113   SUBROUTINE trd_trc( ptrtrd, kjn, ktrd, kt, Kmm ) 
    113114      INTEGER               , INTENT( in )     ::   kt      ! time step 
     115      INTEGER               , INTENT( in )     ::   Kmm     ! time level index 
    114116      INTEGER               , INTENT( in )     ::   kjn     ! tracer index 
    115117      INTEGER               , INTENT( in )     ::   ktrd    ! tracer trend index 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/trcsms.F90

    r10963 r10966  
    3434CONTAINS 
    3535 
    36    SUBROUTINE trc_sms( kt, Kmm , Krhs ) 
     36   SUBROUTINE trc_sms( kt, Kbb, Kmm , Krhs ) 
    3737      !!--------------------------------------------------------------------- 
    3838      !!                     ***  ROUTINE trc_sms  *** 
     
    4343      !! ------------------------------------------------------------------------------------- 
    4444      INTEGER, INTENT( in ) ::   kt        ! ocean time-step index       
    45       INTEGER, INTENT( in ) ::   Kmm, Krhs ! time level indices 
     45      INTEGER, INTENT( in ) ::   Kbb, Kmm, Krhs ! time level indices 
    4646      !! 
    4747      CHARACTER (len=25) :: charout 
     
    5050      IF( ln_timing )   CALL timing_start('trc_sms') 
    5151      ! 
    52       IF( ln_pisces  )   CALL trc_sms_pisces ( kt, Kmm )    ! main program of PISCES  
    53       IF( ll_cfc     )   CALL trc_sms_cfc    ( kt )    ! surface fluxes of CFC 
    54       IF( ln_c14     )   CALL trc_sms_c14    ( kt )    ! surface fluxes of C14 
    55       IF( ln_age     )   CALL trc_sms_age    ( kt )    ! Age tracer 
    56       IF( ln_my_trc  )   CALL trc_sms_my_trc ( kt, Kmm, Krhs )    ! MY_TRC  tracers 
     52      IF( ln_pisces  )   CALL trc_sms_pisces ( kt, Kbb, Kmm )          ! main program of PISCES  
     53      IF( ll_cfc     )   CALL trc_sms_cfc    ( kt,      Kmm )          ! surface fluxes of CFC 
     54      IF( ln_c14     )   CALL trc_sms_c14    ( kt,      Kmm )          ! surface fluxes of C14 
     55      IF( ln_age     )   CALL trc_sms_age    ( kt,      Kmm )          ! Age tracer 
     56      IF( ln_my_trc  )   CALL trc_sms_my_trc ( kt,      Kmm, Krhs )    ! MY_TRC  tracers 
    5757 
    5858      IF(ln_ctl) THEN      ! print mean trends (used for debugging) 
  • NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/trcstp.F90

    r10963 r10966  
    101101         IF( lrst_trc )            CALL trc_rst_cal  ( kt, 'WRITE' )   ! calendar 
    102102                                   CALL trc_wri      ( kt )                       ! output of passive tracers with iom I/O manager 
    103                                    CALL trc_sms      ( kt,     Kmm, Krhs )       ! tracers: sinks and sources 
     103                                   CALL trc_sms      ( kt, Kbb, Kmm, Krhs )       ! tracers: sinks and sources 
    104104                                   CALL trc_trp      ( kt, Kbb, Kmm, Krhs, Kaa )  ! transport of passive tracers 
    105105         IF( kt == nittrc000 ) THEN 
     
    108108         ENDIF 
    109109         IF( lrst_trc )            CALL trc_rst_wri  ( kt, Kbb, Kmm, Krhs )       ! write tracer restart file 
    110          IF( lk_trdmxl_trc  )      CALL trd_mxl_trc  ( kt )                       ! trends: Mixed-layer 
     110         IF( lk_trdmxl_trc  )      CALL trd_mxl_trc  ( kt,      Kmm       )       ! trends: Mixed-layer 
    111111         ! 
    112112         IF( nn_dttrc /= 1   )     CALL trc_sub_reset( kt, Kbb, Kmm, Krhs )       ! resetting physical variables when sub-stepping 
Note: See TracChangeset for help on using the changeset viewer.