123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- MODULE trcbbl
- !!======================================================================
- !! *** MODULE trcbbl ***
- !! Ocean passive tracers physics : advective and/or diffusive bottom boundary
- !! layer scheme
- !!======================================================================
- !!==============================================================================
- !! History : OPA ! 1996-06 (L. Mortier) Original code
- !! 8.0 ! 1997-11 (G. Madec) Optimization
- !! NEMO 1.0 ! 2002-08 (G. Madec) free form + modules
- !! - ! 2004-01 (A. de Miranda, G. Madec, J.M. Molines ) add advective bbl
- !! 3.3 ! 2009-11 (G. Madec) merge trabbl and trabbl_adv + style + optimization
- !! - ! 2010-04 (G. Madec) Campin & Goosse advective bbl
- !! - ! 2010-06 (C. Ethe, G. Madec) merge TRA-TRC
- !!----------------------------------------------------------------------
- #if defined key_top && defined key_trabbl
- !!----------------------------------------------------------------------
- !! 'key_trabbl diffusive or/and adevective bottom boundary layer
- !!----------------------------------------------------------------------
- !! trc_bbl : update the tracer trends due to the bottom boundary layer (advective and/or diffusive)
- !!----------------------------------------------------------------------
- USE oce_trc ! ocean dynamics and active tracers variables
- USE trc ! ocean passive tracers variables
- USE trcnam_trp ! passive tracers transport namelist variables
- USE trabbl !
- USE prtctl_trc ! Print control for debbuging
- USE trd_oce
- USE trdtra
- PUBLIC trc_bbl ! routine called by step.F90
- !! * Substitutions
- # include "top_substitute.h90"
- !!----------------------------------------------------------------------
- !! NEMO/TOP 3.3 , NEMO Consortium (2010)
- !! $Id: trcbbl.F90 4990 2014-12-15 16:42:49Z timgraham $
- !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
- !!----------------------------------------------------------------------
- CONTAINS
- SUBROUTINE trc_bbl( kt )
- !!----------------------------------------------------------------------
- !! *** ROUTINE bbl ***
- !!
- !! ** Purpose : Compute the before tracer (t & s) trend associated
- !! with the bottom boundary layer and add it to the general trend
- !! of tracer equations.
- !!
- !!----------------------------------------------------------------------
- INTEGER, INTENT( in ) :: kt ! ocean time-step
- CHARACTER (len=22) :: charout
- REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztrtrd
- !!----------------------------------------------------------------------
- !
- IF( nn_timing == 1 ) CALL timing_start('trc_bbl')
- !
- IF( .NOT. lk_offline .AND. nn_dttrc == 1 ) THEN
- CALL bbl( kt, nittrc000, 'TRC' ) ! Online coupling with dynamics : Computation of bbl coef and bbl transport
- l_bbl = .FALSE. ! Offline coupling with dynamics : Read bbl coef and bbl transport from input files
- ENDIF
- IF( l_trdtrc ) THEN
- CALL wrk_alloc( jpi, jpj, jpk, jptra, ztrtrd ) ! temporary save of trends
- ztrtrd(:,:,:,:) = tra(:,:,:,:)
- ENDIF
- !* Diffusive bbl :
- IF( nn_bbl_ldf == 1 ) THEN
- !
- CALL tra_bbl_dif( trb, tra, jptra )
- IF( ln_ctl ) THEN
- WRITE(charout, FMT="(' bbl_dif')") ; CALL prt_ctl_trc_info(charout)
- CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' )
- ENDIF
- !
- END IF
- !* Advective bbl : bbl upstream advective trends added to the tracer trends
- IF( nn_bbl_adv /= 0 ) THEN
- !
- CALL tra_bbl_adv( trb, tra, jptra )
- IF( ln_ctl ) THEN
- WRITE(charout, FMT="(' bbl_adv')") ; CALL prt_ctl_trc_info(charout)
- CALL prt_ctl_trc( tab4d=tra, mask=tmask, clinfo=ctrcnm, clinfo2='trd' )
- ENDIF
- !
- END IF
- IF( l_trdtrc ) THEN ! save the horizontal diffusive trends for further diagnostics
- DO jn = 1, jptra
- ztrtrd(:,:,:,jn) = tra(:,:,:,jn) - ztrtrd(:,:,:,jn)
- CALL trd_tra( kt, 'TRC', jn, jptra_bbl, ztrtrd(:,:,:,jn) )
- END DO
- CALL wrk_dealloc( jpi, jpj, jpk, jptra, ztrtrd ) ! temporary save of trends
- ENDIF
- !
- IF( nn_timing == 1 ) CALL timing_stop('trc_bbl')
- !
- END SUBROUTINE trc_bbl
- #else
- !!----------------------------------------------------------------------
- !! Dummy module : No bottom boundary layer scheme
- !!----------------------------------------------------------------------
- CONTAINS
- SUBROUTINE trc_bbl( kt ) ! Empty routine
- WRITE(*,*) 'tra_bbl: You should not have seen this print! error?', kt
- END SUBROUTINE trc_bbl
- #endif
- !!======================================================================
- END MODULE trcbbl
|