source: branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/TOP_SRC/TRP/trcbbl.F90 @ 7771

Last change on this file since 7771 was 7771, checked in by frrh, 4 years ago

Apply optimisations to various areas of code replacing the use of
allocated pointers with straightforward direct ALLOCATE and DEALLOCATE
operations.

These optimisations largely have an impact in models featuring MEDUSA,
i.e. those with significant numbers of tracers, although they are
expected to have a small impact in all configurations.

Code developed and tested in NEMO branch branches/UKMO/dev_r5518_optim_GO6_alloc
Tested in stand-alone GO6-GSI8, GO6-GSI8-MEDUSA and UKESM coupled models.
NEMO ticket #1821 documents this change further.

File size: 5.1 KB
RevLine 
[941]1MODULE trcbbl
[2528]2  !!======================================================================
[941]3   !!                       ***  MODULE  trcbbl  ***
4   !! Ocean passive tracers physics :  advective and/or diffusive bottom boundary
5   !!                                  layer scheme
[1175]6   !!======================================================================
[2528]7   !!==============================================================================
8   !! History :  OPA  !  1996-06  (L. Mortier)  Original code
9   !!            8.0  !  1997-11  (G. Madec)    Optimization
10   !!   NEMO     1.0  !  2002-08  (G. Madec)  free form + modules
11   !!             -   !  2004-01  (A. de Miranda, G. Madec, J.M. Molines ) add advective bbl
12   !!            3.3  !  2009-11  (G. Madec)  merge trabbl and trabbl_adv + style + optimization
13   !!             -   !  2010-04  (G. Madec)  Campin & Goosse advective bbl
14   !!             -   !  2010-06  (C. Ethe, G. Madec)  merge TRA-TRC
[941]15   !!----------------------------------------------------------------------
[2528]16#if  defined key_top &&  defined key_trabbl 
[941]17   !!----------------------------------------------------------------------
[2528]18   !!   'key_trabbl                      diffusive or/and adevective bottom boundary layer
[941]19   !!----------------------------------------------------------------------
[2528]20   !!    trc_bbl       : update the tracer trends due to the bottom boundary layer (advective and/or diffusive)
[941]21   !!----------------------------------------------------------------------
22   USE oce_trc             ! ocean dynamics and active tracers variables
[1175]23   USE trc                 ! ocean passive tracers variables
[2528]24   USE trcnam_trp      ! passive tracers transport namelist variables
25   USE trabbl              !
[941]26   USE prtctl_trc          ! Print control for debbuging
[4990]27   USE trd_oce
[2528]28   USE trdtra
[941]29
[2528]30   PUBLIC   trc_bbl       !  routine called by step.F90
[941]31
32
33   !! * Substitutions
34#  include "top_substitute.h90"
35   !!----------------------------------------------------------------------
[2528]36   !! NEMO/TOP 3.3 , NEMO Consortium (2010)
[6486]37   !! $Id$
[2528]38   !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
[941]39   !!----------------------------------------------------------------------
40
41CONTAINS
42
[2528]43
44   SUBROUTINE trc_bbl( kt )
[941]45      !!----------------------------------------------------------------------
[2528]46      !!                  ***  ROUTINE bbl  ***
47      !!                   
48      !! ** Purpose :   Compute the before tracer (t & s) trend associated
49      !!     with the bottom boundary layer and add it to the general trend
50      !!     of tracer equations.
[941]51      !!
[2528]52      !!---------------------------------------------------------------------- 
53      INTEGER, INTENT( in ) ::   kt   ! ocean time-step
[941]54      CHARACTER (len=22) :: charout
[7771]55      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) ::   ztrtrd
[941]56      !!----------------------------------------------------------------------
[3294]57      !
58      IF( nn_timing == 1 )  CALL timing_start('trc_bbl')
59      !
60      IF( .NOT. lk_offline .AND. nn_dttrc == 1 ) THEN
61         CALL bbl( kt, nittrc000, 'TRC' )      ! Online coupling with dynamics  : Computation of bbl coef and bbl transport
62         l_bbl = .FALSE.                       ! Offline coupling with dynamics : Read bbl coef and bbl transport from input files
[2528]63      ENDIF
[941]64
[2528]65      IF( l_trdtrc )  THEN
[7771]66         ALLOCATE(ztrtrd( 1:jpi, 1:jpj, 1:jpk, 1:jptra )) ! temporary save of trends
[2528]67         ztrtrd(:,:,:,:)  = tra(:,:,:,:)
[1175]68      ENDIF
[941]69
[2528]70      !* Diffusive bbl :
71      IF( nn_bbl_ldf == 1 ) THEN
72         !
73         CALL tra_bbl_dif( trb, tra, jptra ) 
74         IF( ln_ctl )   THEN
75            WRITE(charout, FMT="(' bbl_dif')")  ;  CALL prt_ctl_trc_info(charout)
76            CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' )
77         ENDIF
78         !
79      END IF
[941]80
[2528]81      !* Advective bbl : bbl upstream advective trends added to the tracer trends
82      IF( nn_bbl_adv /= 0 ) THEN
83         !
84         CALL tra_bbl_adv( trb, tra, jptra ) 
85         IF( ln_ctl )   THEN
86            WRITE(charout, FMT="(' bbl_adv')")  ;  CALL prt_ctl_trc_info(charout)
87            CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' )
88         ENDIF
89         !
90      END IF
[941]91
[2528]92      IF( l_trdtrc )   THEN                      ! save the horizontal diffusive trends for further diagnostics
93        DO jn = 1, jptra
94           ztrtrd(:,:,:,jn) = tra(:,:,:,jn) - ztrtrd(:,:,:,jn)
[4990]95           CALL trd_tra( kt, 'TRC', jn, jptra_bbl, ztrtrd(:,:,:,jn) )
[941]96        END DO
[7771]97        DEALLOCATE(ztrtrd ) ! temporary save of trends
[941]98      ENDIF
[2528]99      !
[3294]100      IF( nn_timing == 1 ) CALL timing_stop('trc_bbl')
101      !
[2528]102   END SUBROUTINE trc_bbl
[941]103
104#else
105   !!----------------------------------------------------------------------
106   !!   Dummy module :                      No bottom boundary layer scheme
107   !!----------------------------------------------------------------------
108CONTAINS
[2528]109   SUBROUTINE trc_bbl( kt )              ! Empty routine
110      WRITE(*,*) 'tra_bbl: You should not have seen this print! error?', kt
111   END SUBROUTINE trc_bbl
[941]112#endif
113
114   !!======================================================================
115END MODULE trcbbl
Note: See TracBrowser for help on using the repository browser.