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.
traadv_mle.F90 in branches/UKMO/test_moci_test_suite_namelist_read/NEMOGCM/NEMO/OPA_SRC/TRA – NEMO

source: branches/UKMO/test_moci_test_suite_namelist_read/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_mle.F90 @ 9366

Last change on this file since 9366 was 9366, checked in by andmirek, 6 years ago

#2050 first version. Compiled OK in moci test suite

File size: 19.9 KB
Line 
1MODULE traadv_mle
2   !!======================================================================
3   !!                    ***  MODULE  traadv_mle  ***
4   !! Ocean tracers: Mixed Layer Eddy induced transport
5   !!======================================================================
6   !! History :  3.3  !  2010-08  (G. Madec)  Original code
7   !!----------------------------------------------------------------------
8
9   !!----------------------------------------------------------------------
10   !!   tra_adv_mle      : update the effective transport with the Mixed Layer Eddy induced transport
11   !!   tra_adv_mle_init : initialisation of the Mixed Layer Eddy induced transport computation
12   !!----------------------------------------------------------------------
13   USE oce            ! ocean dynamics and tracers variables
14   USE dom_oce        ! ocean space and time domain variables
15   USE phycst         ! physical constant
16   USE zdfmxl         ! mixed layer depth
17   USE lbclnk         ! lateral boundary condition / mpp link
18   USE in_out_manager ! I/O manager
19   USE iom            ! IOM library
20   USE lib_mpp        ! MPP library
21   USE wrk_nemo       ! work arrays
22   USE timing         ! Timing
23
24   IMPLICIT NONE
25   PRIVATE
26
27   PUBLIC   tra_adv_mle        ! routine called in traadv.F90
28   PUBLIC   tra_adv_mle_init   ! routine called in traadv.F90
29   PRIVATE  mle_namelist
30
31   !                                               !!* namelist namtra_adv_mle *
32   LOGICAL, PUBLIC ::   ln_mle              ! flag to activate the Mixed Layer Eddy (MLE) parameterisation
33   INTEGER         ::   nn_mle              ! MLE type: =0 standard Fox-Kemper ; =1 new formulation
34   INTEGER         ::   nn_mld_uv           ! space interpolation of MLD at u- & v-pts (0=min,1=averaged,2=max)
35   INTEGER         ::   nn_conv             ! =1 no MLE in case of convection ; =0 always MLE
36   REAL(wp)        ::   rn_ce               ! MLE coefficient
37   !                                           ! parameters used in nn_mle = 0 case
38   REAL(wp)        ::   rn_lf                  ! typical scale of mixed layer front
39   REAL(wp)        ::   rn_time             ! time scale for mixing momentum across the mixed layer
40   !                                             ! parameters used in nn_mle = 1 case
41   REAL(wp)        ::   rn_lat                   ! reference latitude for a 5 km scale of ML front
42   REAL(wp)        ::   rn_rho_c_mle         ! Density criterion for definition of MLD used by FK
43
44   REAL(wp) ::   r5_21 = 5.e0 / 21.e0   ! factor used in mle streamfunction computation
45   REAL(wp) ::   rb_c                   ! ML buoyancy criteria = g rho_c /rau0 where rho_c is defined in zdfmld
46   REAL(wp) ::   rc_f                   ! MLE coefficient (= rn_ce / (5 km * fo) ) in nn_mle=1 case
47
48   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   rfu, rfv   ! modified Coriolis parameter (f+tau) at u- & v-pts
49   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   r1_ft      ! inverse of the modified Coriolis parameter at t-pts
50
51   !! * Substitutions
52#  include "domzgr_substitute.h90"
53#  include "vectopt_loop_substitute.h90"
54   !!----------------------------------------------------------------------
55   !! NEMO/OPA 4.0 , NEMO Consortium (2011)
56   !! $Id$
57   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
58   !!----------------------------------------------------------------------
59CONTAINS
60
61   SUBROUTINE tra_adv_mle( kt, kit000, pu, pv, pw, cdtype )
62      !!----------------------------------------------------------------------
63      !!                  ***  ROUTINE adv_mle  ***
64      !!
65      !! ** Purpose :   Add to the transport the Mixed Layer Eddy induced transport
66      !!
67      !! ** Method  :   The 3 components of the Mixed Layer Eddy (MLE) induced
68      !!              transport are computed as follows :
69      !!                zu_mle = dk[ zpsi_uw ]
70      !!                zv_mle = dk[ zpsi_vw ]
71      !!                zw_mle = - di[ zpsi_uw ] - dj[ zpsi_vw ]
72      !!                where zpsi is the MLE streamfunction at uw and vw points (see the doc)
73      !!              and added to the input velocity :
74      !!                p.n = p.n + z._mle
75      !!
76      !! ** Action  : - (pun,pvn,pwn) increased by the mle transport
77      !!                CAUTION, the transport is not updated at the last line/raw
78      !!                         this may be a problem for some advection schemes
79      !!
80      !! References: Fox-Kemper et al., JPO, 38, 1145-1165, 2008
81      !!             Fox-Kemper and Ferrari, JPO, 38, 1166-1179, 2008
82      !!----------------------------------------------------------------------
83      !
84      INTEGER                         , INTENT(in   ) ::   kt         ! ocean time-step index
85      INTEGER                         , INTENT(in   ) ::   kit000     ! first time step index
86      CHARACTER(len=3)                , INTENT(in   ) ::   cdtype     ! =TRA or TRC (tracer indicator)
87      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pu         ! in : 3 ocean transport components
88      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pv         ! out: same 3  transport components
89      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) ::   pw         !   increased by the MLE induced transport
90      !
91      INTEGER  ::   ji, jj, jk   ! dummy loop indices
92      INTEGER  ::   ikmax        ! temporary integer
93      REAL(wp) ::   zcuw, zmuw   ! local scalar
94      REAL(wp) ::   zcvw, zmvw   !   -      -
95      REAL(wp) ::   zc                                     !   -      -
96
97      INTEGER  ::   ii, ij, ik              ! local integers
98      INTEGER, DIMENSION(3) ::   ilocu      !
99      INTEGER, DIMENSION(2) ::   ilocs      !
100      REAL(wp), POINTER, DIMENSION(:,:  ) :: zpsim_u, zpsim_v, zmld, zbm, zhu, zhv, zn2, zLf_NH, zLf_MH
101      REAL(wp), POINTER, DIMENSION(:,:,:) :: zpsi_uw, zpsi_vw
102      INTEGER, POINTER, DIMENSION(:,:) :: inml_mle
103      !!----------------------------------------------------------------------
104
105      IF( nn_timing == 1 )  CALL timing_start('tra_adv_mle')
106      CALL wrk_alloc( jpi, jpj, zpsim_u, zpsim_v, zmld, zbm, zhu, zhv, zn2, zLf_NH, zLf_MH)
107      CALL wrk_alloc( jpi, jpj, jpk, zpsi_uw, zpsi_vw)
108      CALL wrk_alloc( jpi, jpj, inml_mle)
109      !
110      !                                      !==  MLD used for MLE  ==!
111      !                                                ! compute from the 10m density to deal with the diurnal cycle
112      inml_mle(:,:) = mbkt(:,:) + 1                    ! init. to number of ocean w-level (T-level + 1)
113      DO jk = jpkm1, nlb10, -1                         ! from the bottom to nlb10 (10m)
114         DO jj = 1, jpj
115            DO ji = 1, jpi                             ! index of the w-level at the ML based
116               IF( rhop(ji,jj,jk) > rhop(ji,jj,nla10) + rn_rho_c_mle )   inml_mle(ji,jj) = jk      ! Mixed layer
117            END DO
118         END DO
119      END DO
120      ikmax = MIN( MAXVAL( inml_mle(:,:) ), jpkm1 )                  ! max level of the computation
121      !
122      !
123      zmld(:,:) = 0._wp                      !==   Horizontal shape of the MLE  ==!
124      zbm (:,:) = 0._wp
125      zn2 (:,:) = 0._wp
126      DO jk = 1, ikmax                                 ! MLD and mean buoyancy and N2 over the mixed layer
127         DO jj = 1, jpj
128            DO ji = 1, jpi
129               zc = fse3t(ji,jj,jk) * REAL( MIN( MAX( 0, inml_mle(ji,jj)-jk ) , 1  )  )    ! zc being 0 outside the ML t-points
130               zmld(ji,jj) = zmld(ji,jj) + zc
131               zbm (ji,jj) = zbm (ji,jj) + zc * (rau0 - rhop(ji,jj,jk) ) * r1_rau0
132               zn2 (ji,jj) = zn2 (ji,jj) + zc * (rn2(ji,jj,jk)+rn2(ji,jj,jk+1))*0.5_wp
133            END DO
134         END DO
135      END DO
136
137      SELECT CASE( nn_mld_uv )                         ! MLD at u- & v-pts
138      CASE ( 0 )                                               != min of the 2 neighbour MLDs
139         DO jj = 1, jpjm1
140            DO ji = 1, fs_jpim1   ! vector opt.
141               zhu(ji,jj) = MIN( zmld(ji+1,jj), zmld(ji,jj) )
142               zhv(ji,jj) = MIN( zmld(ji,jj+1), zmld(ji,jj) )
143            END DO
144         END DO
145      CASE ( 1 )                                               != average of the 2 neighbour MLDs
146         DO jj = 1, jpjm1
147            DO ji = 1, fs_jpim1   ! vector opt.
148               zhu(ji,jj) = ( zmld(ji+1,jj) + zmld(ji,jj) ) * 0.5_wp
149               zhv(ji,jj) = ( zmld(ji,jj+1) + zmld(ji,jj) ) * 0.5_wp
150            END DO
151         END DO
152      CASE ( 2 )                                               != max of the 2 neighbour MLDs
153         DO jj = 1, jpjm1
154            DO ji = 1, fs_jpim1   ! vector opt.
155               zhu(ji,jj) = MAX( zmld(ji+1,jj), zmld(ji,jj) )
156               zhv(ji,jj) = MAX( zmld(ji,jj+1), zmld(ji,jj) )
157            END DO
158         END DO
159      END SELECT
160      !                                                ! convert density into buoyancy
161      zbm(:,:) = + grav * zbm(:,:) / MAX( fse3t(:,:,1), zmld(:,:) )
162      !
163      !
164      !                                      !==  Magnitude of the MLE stream function  ==!
165      !
166      !                 di[bm]  Ds
167      ! Psi = Ce  H^2 ---------------- e2u  mu(z)   where fu Lf = MAX( fu*rn_fl , (Db H)^1/2 )
168      !                  e1u   Lf fu                      and the e2u for the "transport"
169      !                                                      (not *e3u as divided by e3u at the end)
170      !
171      IF( nn_mle == 0 ) THEN           ! Fox-Kemper et al. 2010 formulation
172         DO jj = 1, jpjm1
173            DO ji = 1, fs_jpim1   ! vector opt.
174               zpsim_u(ji,jj) = rn_ce * zhu(ji,jj) * zhu(ji,jj)  * e2u(ji,jj)                                            &
175                  &           * ( zbm(ji+1,jj) - zbm(ji,jj) ) * MIN( 111.e3_wp          , e1u(ji,jj)                 )   &
176                  &           / (         e1u(ji,jj)          * MAX( rn_lf * rfu(ji,jj) , SQRT( rb_c * zhu(ji,jj) ) )   )
177                  !
178               zpsim_v(ji,jj) = rn_ce * zhv(ji,jj) * zhv(ji,jj)  * e1v(ji,jj)                                            &
179                  &           * ( zbm(ji,jj+1) - zbm(ji,jj) ) * MIN( 111.e3_wp          , e2v(ji,jj)                 )   &
180                  &           / (         e2v(ji,jj)          * MAX( rn_lf * rfv(ji,jj) , SQRT( rb_c * zhv(ji,jj) ) )   )
181            END DO
182         END DO
183         !
184      ELSEIF( nn_mle == 1 ) THEN       ! New formulation (Lf = 5km fo/ff with fo=Coriolis parameter at latitude rn_lat)
185         DO jj = 1, jpjm1
186            DO ji = 1, fs_jpim1   ! vector opt.
187               zpsim_u(ji,jj) = rc_f *   zhu(ji,jj)   * zhu(ji,jj)   * e2u(ji,jj) / e1u(ji,jj)          &
188                  &                  * ( zbm(ji+1,jj) - zbm(ji,jj) ) * MIN( 111.e3_wp , e1u(ji,jj) )
189                  !
190               zpsim_v(ji,jj) = rc_f *   zhv(ji,jj)   * zhv(ji,jj)   * e1v(ji,jj) / e2v(ji,jj)          &
191                  &                  * ( zbm(ji,jj+1) - zbm(ji,jj) ) * MIN( 111.e3_wp , e2v(ji,jj) )
192            END DO
193         END DO
194      ENDIF
195      !
196      IF( nn_conv == 1 ) THEN              ! No MLE in case of convection
197         DO jj = 1, jpjm1
198            DO ji = 1, fs_jpim1   ! vector opt.
199               IF( MIN( zn2(ji,jj) , zn2(ji+1,jj) ) < 0._wp )   zpsim_u(ji,jj) = 0._wp
200               IF( MIN( zn2(ji,jj) , zn2(ji,jj+1) ) < 0._wp )   zpsim_v(ji,jj) = 0._wp
201            END DO
202         END DO
203      ENDIF
204      !
205      !                                      !==  structure function value at uw- and vw-points  ==!
206      DO jj = 1, jpjm1
207         DO ji = 1, fs_jpim1   ! vector opt.
208            zhu(ji,jj) = 1._wp / zhu(ji,jj)                   ! hu --> 1/hu
209            zhv(ji,jj) = 1._wp / zhv(ji,jj)
210         END DO
211      END DO
212      !
213      zpsi_uw(:,:,:) = 0._wp
214      zpsi_vw(:,:,:) = 0._wp
215      !
216      DO jk = 2, ikmax                                ! start from 2 : surface value = 0
217         DO jj = 1, jpjm1
218            DO ji = 1, fs_jpim1   ! vector opt.
219               zcuw = 1._wp - ( fsdepw(ji+1,jj,jk) + fsdepw(ji,jj,jk) ) * zhu(ji,jj)
220               zcvw = 1._wp - ( fsdepw(ji,jj+1,jk) + fsdepw(ji,jj,jk) ) * zhv(ji,jj)
221               zcuw = zcuw * zcuw
222               zcvw = zcvw * zcvw
223               zmuw = MAX(  0._wp , ( 1._wp - zcuw ) * ( 1._wp + r5_21 * zcuw )  )
224               zmvw = MAX(  0._wp , ( 1._wp - zcvw ) * ( 1._wp + r5_21 * zcvw )  )
225               !
226               zpsi_uw(ji,jj,jk) = zpsim_u(ji,jj) * zmuw * umask(ji,jj,jk)
227               zpsi_vw(ji,jj,jk) = zpsim_v(ji,jj) * zmvw * vmask(ji,jj,jk)
228            END DO
229         END DO
230      END DO
231      !
232      !                                      !==  transport increased by the MLE induced transport ==!
233      DO jk = 1, ikmax
234         DO jj = 1, jpjm1                          ! CAUTION pu,pv must be defined at row/column i=1 / j=1
235            DO ji = 1, fs_jpim1   ! vector opt.
236               pu(ji,jj,jk) = pu(ji,jj,jk) + ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji,jj,jk+1) )
237               pv(ji,jj,jk) = pv(ji,jj,jk) + ( zpsi_vw(ji,jj,jk) - zpsi_vw(ji,jj,jk+1) )
238            END DO
239         END DO
240         DO jj = 2, jpjm1
241            DO ji = fs_2, fs_jpim1   ! vector opt.
242               pw(ji,jj,jk) = pw(ji,jj,jk) - ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji-1,jj,jk)   &
243                  &                          + zpsi_vw(ji,jj,jk) - zpsi_vw(ji,jj-1,jk) )
244            END DO
245         END DO
246      END DO
247
248      IF( cdtype == 'TRA') THEN              !==  outputs  ==!
249         !
250         zLf_NH(:,:) = SQRT( rb_c * zmld(:,:) ) * r1_ft(:,:)      ! Lf = N H / f
251         CALL iom_put( "Lf_NHpf" , zLf_NH  )    ! Lf = N H / f
252         !
253         ! divide by cross distance to give streamfunction with dimensions m^2/s
254         DO jk = 1, ikmax+1
255            zpsi_uw(:,:,jk) = zpsi_uw(:,:,jk)/e2u(:,:)
256            zpsi_vw(:,:,jk) = zpsi_vw(:,:,jk)/e1v(:,:)
257         END DO
258         CALL iom_put( "psiu_mle", zpsi_uw )    ! i-mle streamfunction
259         CALL iom_put( "psiv_mle", zpsi_vw )    ! j-mle streamfunction
260      ENDIF
261      CALL wrk_dealloc( jpi, jpj, zpsim_u, zpsim_v, zmld, zbm, zhu, zhv, zn2, zLf_NH, zLf_MH)
262      CALL wrk_dealloc( jpi, jpj, jpk, zpsi_uw, zpsi_vw)
263      CALL wrk_dealloc( jpi, jpj, inml_mle)
264
265      IF( nn_timing == 1 )  CALL timing_stop('tra_adv_mle')
266      !
267   END SUBROUTINE tra_adv_mle
268
269
270   SUBROUTINE tra_adv_mle_init
271      !!---------------------------------------------------------------------
272      !!                  ***  ROUTINE tra_adv_mle_init  ***
273      !!
274      !! ** Purpose :   Control the consistency between namelist options for
275      !!              tracer advection schemes and set nadv
276      !!----------------------------------------------------------------------
277      INTEGER  ::   ji, jj, jk   ! dummy loop indices
278      INTEGER  ::   ierr
279      INTEGER ::    ios                 ! Local integer output status for namelist read
280      REAL(wp) ::   z1_t2, zfu, zfv                                !    -         -
281      !
282      NAMELIST/namtra_adv_mle/ ln_mle , nn_mle, rn_ce, rn_lf, rn_time, rn_lat, nn_mld_uv, nn_conv, rn_rho_c_mle
283      !!----------------------------------------------------------------------
284
285      IF(lwm) THEN
286         REWIND( numnam_ref )              ! Namelist namtra_adv_mle in reference namelist : Tracer advection scheme
287         READ  ( numnam_ref, namtra_adv_mle, IOSTAT = ios, ERR = 901)
288901      IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtra_adv_mle in reference namelist', lwm )
289         REWIND( numnam_cfg )              ! Namelist namtra_adv_mle in configuration namelist : Tracer advection scheme
290         READ  ( numnam_cfg, namtra_adv_mle, IOSTAT = ios, ERR = 902 )
291902      IF( ios /= 0 ) CALL ctl_nam ( ios , 'namtra_adv_mle in configuration namelist', lwm )
292      ENDIF
293      IF(lwm) WRITE ( numond, namtra_adv_mle )
294
295      call mle_namelist()
296
297      IF(lwp) THEN                     ! Namelist print
298         WRITE(numout,*)
299         WRITE(numout,*) 'tra_adv_mle_init : mixed layer eddy (MLE) advection acting on tracers'
300         WRITE(numout,*) '~~~~~~~~~~~~~~~~'
301         WRITE(numout,*) '   Namelist namtra_adv_mle : mixed layer eddy advection on tracers'
302         WRITE(numout,*) '      use mixed layer eddy (MLE, i.e. Fox-Kemper param) (T/F)      ln_mle    = ', ln_mle
303         WRITE(numout,*) '      MLE type: =0 standard Fox-Kemper ; =1 new formulation        nn_mle    = ', nn_mle
304         WRITE(numout,*) '      magnitude of the MLE (typical value: 0.06 to 0.08)           rn_ce     = ', rn_ce
305         WRITE(numout,*) '      scale of ML front (ML radius of deformation) (rn_mle=0)      rn_lf     = ', rn_lf, 'm'
306         WRITE(numout,*) '      maximum time scale of MLE                    (rn_mle=0)      rn_time   = ', rn_time, 's'
307         WRITE(numout,*) '      reference latitude (degrees) of MLE coef.    (rn_mle=1)      rn_lat    = ', rn_lat, 'deg'
308         WRITE(numout,*) '      space interp. of MLD at u-(v-)pts (0=min,1=averaged,2=max)   nn_mld_uv = ', nn_mld_uv
309         WRITE(numout,*) '      =1 no MLE in case of convection ; =0 always MLE              nn_conv   = ', nn_conv
310         WRITE(numout,*) '      Density difference used to define ML for FK              rn_rho_c_mle  = ', rn_rho_c_mle
311      ENDIF
312      !
313      IF(lwp) THEN
314         WRITE(numout,*)
315         IF( ln_mle ) THEN
316            WRITE(numout,*) '   Mixed Layer Eddy induced transport added to tracer advection'
317            IF( nn_mle == 0 )   WRITE(numout,*) '   Fox-Kemper et al 2010 formulation'
318            IF( nn_mle == 1 )   WRITE(numout,*) '   New formulation'
319         ELSE
320            WRITE(numout,*) '   Mixed Layer Eddy parametrisation NOT used'
321         ENDIF
322      ENDIF
323      !
324      IF( ln_mle ) THEN                ! MLE initialisation
325         !
326         rb_c = grav * rn_rho_c_mle /rau0        ! Mixed Layer buoyancy criteria
327         IF(lwp) WRITE(numout,*)
328         IF(lwp) WRITE(numout,*) '      ML buoyancy criteria = ', rb_c, ' m/s2 '
329         IF(lwp) WRITE(numout,*) '      associated ML density criteria defined in zdfmxl = ', rho_c, 'kg/m3'
330         !
331         IF( nn_mle == 0 ) THEN           ! MLE array allocation & initialisation
332            ALLOCATE( rfu(jpi,jpj) , rfv(jpi,jpj) , STAT= ierr )
333            IF( ierr /= 0 )   CALL ctl_stop( 'tra_adv_mle_init: failed to allocate arrays' )
334            z1_t2 = 1._wp / ( rn_time * rn_time )
335            DO jj = 2, jpj                           ! "coriolis+ time^-1" at u- & v-points
336               DO ji = fs_2, jpi   ! vector opt.
337                  zfu = ( ff(ji,jj) + ff(ji,jj-1) ) * 0.5_wp
338                  zfv = ( ff(ji,jj) + ff(ji-1,jj) ) * 0.5_wp
339                  rfu(ji,jj) = SQRT(  zfu * zfu + z1_t2 )
340                  rfv(ji,jj) = SQRT(  zfv * zfv + z1_t2 )
341               END DO
342            END DO
343            CALL lbc_lnk( rfu, 'U', 1. )   ;   CALL lbc_lnk( rfv, 'V', 1. )
344            !
345         ELSEIF( nn_mle == 1 ) THEN           ! MLE array allocation & initialisation
346            rc_f = rn_ce / (  5.e3_wp * 2._wp * omega * SIN( rad * rn_lat )  )
347            !
348         ENDIF
349         !
350         !                                ! 1/(f^2+tau^2)^1/2 at t-point (needed in both nn_mle case)
351         ALLOCATE( r1_ft(jpi,jpj) , STAT= ierr )
352         IF( ierr /= 0 )   CALL ctl_stop( 'tra_adv_mle_init: failed to allocate r1_ft array' )
353         !
354         z1_t2 = 1._wp / ( rn_time * rn_time )
355         r1_ft(:,:) = 2._wp * omega * SIN( rad * gphit(:,:) )
356         r1_ft(:,:) = 1._wp / SQRT(  r1_ft(:,:) * r1_ft(:,:) + z1_t2 )
357         !
358      ENDIF
359      !
360   END SUBROUTINE tra_adv_mle_init
361
362   SUBROUTINE mle_namelist()
363     !!---------------------------------------------------------------------
364     !!                   ***  ROUTINE mle_namelist  ***
365     !!                     
366     !! ** Purpose :   Broadcast namelist variables read by procesor lwm
367     !!
368     !! ** Method  :   use lib_mpp
369     !!----------------------------------------------------------------------
370#if defined key_mpp_mpi
371      CALL mpp_bcast(ln_mle)
372      CALL mpp_bcast(nn_mle)
373      CALL mpp_bcast(rn_ce)
374      CALL mpp_bcast(rn_lf)
375      CALL mpp_bcast(rn_time)
376      CALL mpp_bcast(rn_lat)
377      CALL mpp_bcast(nn_mld_uv)
378      CALL mpp_bcast(nn_conv)
379      CALL mpp_bcast(rn_rho_c_mle)
380#endif
381   END SUBROUTINE mle_namelist
382   !!==============================================================================
383END MODULE traadv_mle
Note: See TracBrowser for help on using the repository browser.