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.
closea.F90 in branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/OPA_SRC/DOM – NEMO

source: branches/UKMO/dev_r5518_GO6_package/NEMOGCM/NEMO/OPA_SRC/DOM/closea.F90

Last change on this file was 11101, checked in by frrh, 5 years ago

Merge changes from Met Office GMED ticket 450 to reduce unnecessary
text output from NEMO.
This output, which is typically not switchable, is rarely of interest
in normal (non-debugging) runs and simply redunantley consumes extra
file space.
Further, the presence of this text output has been shown to
significantly degrade performance of models which are run during
Met Office HPC RAID (disk) checks.
The new code introduces switches which are configurable via the
changes made in the associated Met Office MOCI ticket 399.

File size: 23.1 KB
Line 
1MODULE closea
2   !!======================================================================
3   !!                       ***  MODULE  closea  ***
4   !! Closed Seas  : specific treatments associated with closed seas
5   !!======================================================================
6   !! History :   8.2  !  00-05  (O. Marti)  Original code
7   !!             8.5  !  02-06  (E. Durand, G. Madec)  F90
8   !!             9.0  !  06-07  (G. Madec)  add clo_rnf, clo_ups, clo_bat
9   !!        NEMO 3.4  !  03-12  (P.G. Fogli) sbc_clo bug fix & mpp reproducibility
10   !!----------------------------------------------------------------------
11
12   !!----------------------------------------------------------------------
13   !!   dom_clo    : modification of the ocean domain for closed seas cases
14   !!   sbc_clo    : Special handling of closed seas
15   !!   clo_rnf    : set close sea outflows as river mouths (see sbcrnf)
16   !!   clo_ups    : set mixed centered/upstream scheme in closed sea (see traadv_cen2)
17   !!   clo_bat    : set to zero a field over closed sea (see domzrg)
18   !!----------------------------------------------------------------------
19   USE oce             ! dynamics and tracers
20   USE dom_oce         ! ocean space and time domain
21   USE phycst          ! physical constants
22   USE in_out_manager  ! I/O manager
23   USE sbc_oce         ! ocean surface boundary conditions
24   USE lib_fortran,    ONLY: glob_sum, DDPDD
25   USE lbclnk          ! lateral boundary condition - MPP exchanges
26   USE lib_mpp         ! MPP library
27   USE timing
28
29   IMPLICIT NONE
30   PRIVATE
31
32   PUBLIC dom_clo      ! routine called by domain module
33   PUBLIC sbc_clo      ! routine called by step module
34   PUBLIC clo_rnf      ! routine called by sbcrnf module
35   PUBLIC clo_ups      ! routine called in traadv_cen2(_jki) module
36   PUBLIC clo_bat      ! routine called in domzgr module
37
38   INTEGER, PUBLIC, PARAMETER          ::   jpncs   = 10      !: number of closed sea
39   INTEGER, PUBLIC, DIMENSION(jpncs)   ::   ncstt            !: Type of closed sea
40   INTEGER, PUBLIC, DIMENSION(jpncs)   ::   ncsi1, ncsj1     !: south-west closed sea limits (i,j)
41   INTEGER, PUBLIC, DIMENSION(jpncs)   ::   ncsi2, ncsj2     !: north-east closed sea limits (i,j)
42   INTEGER, PUBLIC, DIMENSION(jpncs)   ::   ncsnr            !: number of point where run-off pours
43   INTEGER, PUBLIC, DIMENSION(jpncs,4) ::   ncsir, ncsjr     !: Location of runoff
44
45   REAL(wp), DIMENSION (jpncs+1)       ::   surf             ! closed sea surface
46
47   !! * Substitutions
48#  include "vectopt_loop_substitute.h90"
49   !!----------------------------------------------------------------------
50   !! NEMO/OPA 3.3 , NEMO Consortium (2010)
51   !! $Id$
52   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt)
53   !!----------------------------------------------------------------------
54CONTAINS
55
56   SUBROUTINE dom_clo
57      !!---------------------------------------------------------------------
58      !!                  ***  ROUTINE dom_clo  ***
59      !!       
60      !! ** Purpose :   Closed sea domain initialization
61      !!
62      !! ** Method  :   if a closed sea is located only in a model grid point
63      !!                just the thermodynamic processes are applied.
64      !!
65      !! ** Action  :   ncsi1(), ncsj1() : south-west closed sea limits (i,j)
66      !!                ncsi2(), ncsj2() : north-east Closed sea limits (i,j)
67      !!                ncsir(), ncsjr() : Location of runoff
68      !!                ncsnr            : number of point where run-off pours
69      !!                ncstt            : Type of closed sea
70      !!                                   =0 spread over the world ocean
71      !!                                   =2 put at location runoff
72      !!----------------------------------------------------------------------
73      INTEGER ::   jc            ! dummy loop indices
74      INTEGER :: isrow           ! local index
75      !!----------------------------------------------------------------------
76     
77      IF(lwp) WRITE(numout,*)
78      IF(lwp) WRITE(numout,*)'dom_clo : closed seas '
79      IF(lwp) WRITE(numout,*)'~~~~~~~'
80      IF(lwp .AND. lflush) CALL flush(numout)
81
82      ! initial values
83      ncsnr(:) = 1  ;  ncsi1(:) = 1  ;  ncsi2(:) = 1  ;  ncsir(:,:) = 1
84      ncstt(:) = 0  ;  ncsj1(:) = 1  ;  ncsj2(:) = 1  ;  ncsjr(:,:) = 1
85
86      ! set the closed seas (in data domain indices)
87      ! -------------------
88
89      IF( cp_cfg == "orca" ) THEN
90         !
91         SELECT CASE ( jp_cfg )
92         !                                           ! =======================
93         CASE ( 1 )                                  ! ORCA_R1 configuration
94            !                                        ! =======================
95            ! This dirty section will be suppressed by simplification process:
96            ! all this will come back in input files
97            ! Currently these hard-wired indices relate to configuration with
98            ! extend grid (jpjglo=332)
99            isrow = 332 - jpjglo
100            !
101            ncsnr(1)   = 1    ; ncstt(1)   = 0           ! Caspian Sea
102            ncsi1(1)   = 332  ; ncsj1(1)   = 243 - isrow
103            ncsi2(1)   = 344  ; ncsj2(1)   = 275 - isrow
104            ncsir(1,1) = 1    ; ncsjr(1,1) = 1
105            !                                       
106            !                                        ! =======================
107         CASE ( 2 )                                  !  ORCA_R2 configuration
108            !                                        ! =======================
109            !                                            ! Caspian Sea
110            ncsnr(1)   =   1  ;  ncstt(1)   =   0           ! spread over the globe
111            ncsi1(1)   =  11  ;  ncsj1(1)   = 103
112            ncsi2(1)   =  17  ;  ncsj2(1)   = 112
113            ncsir(1,1) =   1  ;  ncsjr(1,1) =   1 
114            !                                            ! Great North American Lakes
115            ncsnr(2)   =   1  ;  ncstt(2)   =   2           ! put at St Laurent mouth
116            ncsi1(2)   =  97  ;  ncsj1(2)   = 107
117            ncsi2(2)   = 103  ;  ncsj2(2)   = 111
118            ncsir(2,1) = 110  ;  ncsjr(2,1) = 111           
119            !                                            ! Black Sea (crossed by the cyclic boundary condition)
120            ncsnr(3:4) =   4  ;  ncstt(3:4) =   2           ! put in Med Sea (north of Aegean Sea)
121            ncsir(3:4,1) = 171;  ncsjr(3:4,1) = 106         !
122            ncsir(3:4,2) = 170;  ncsjr(3:4,2) = 106 
123            ncsir(3:4,3) = 171;  ncsjr(3:4,3) = 105 
124            ncsir(3:4,4) = 170;  ncsjr(3:4,4) = 105 
125            ncsi1(3)   = 174  ;  ncsj1(3)   = 107           ! 1 : west part of the Black Sea     
126            ncsi2(3)   = 181  ;  ncsj2(3)   = 112           !            (ie west of the cyclic b.c.)
127            ncsi1(4)   =   2  ;  ncsj1(4)   = 107           ! 2 : east part of the Black Sea
128            ncsi2(4)   =   6  ;  ncsj2(4)   = 112           !           (ie east of the cyclic b.c.)
129             
130         
131
132            !                                        ! =======================
133         CASE ( 4 )                                  !  ORCA_R4 configuration
134            !                                        ! =======================
135            !                                            ! Caspian Sea
136            ncsnr(1)   =  1  ;  ncstt(1)   =  0 
137            ncsi1(1)   =  4  ;  ncsj1(1)   = 53 
138            ncsi2(1)   =  4  ;  ncsj2(1)   = 56
139            ncsir(1,1) =  1  ;  ncsjr(1,1) =  1
140            !                                            ! Great North American Lakes
141            ncsnr(2)   =  1  ;  ncstt(2)   =  2 
142            ncsi1(2)   = 49  ;  ncsj1(2)   = 55
143            ncsi2(2)   = 51  ;  ncsj2(2)   = 56
144            ncsir(2,1) = 57  ;  ncsjr(2,1) = 55
145            !                                            ! Black Sea
146            ncsnr(3)   =  4  ;  ncstt(3)   =  2 
147            ncsi1(3)   = 88  ;  ncsj1(3)   = 55 
148            ncsi2(3)   = 91  ;  ncsj2(3)   = 56
149            ncsir(3,1) = 86  ;  ncsjr(3,1) = 53
150            ncsir(3,2) = 87  ;  ncsjr(3,2) = 53 
151            ncsir(3,3) = 86  ;  ncsjr(3,3) = 52 
152            ncsir(3,4) = 87  ;  ncsjr(3,4) = 52
153            !                                            ! Baltic Sea
154            ncsnr(4)   =  1  ;  ncstt(4)   =  2
155            ncsi1(4)   = 75  ;  ncsj1(4)   = 59
156            ncsi2(4)   = 76  ;  ncsj2(4)   = 61
157            ncsir(4,1) = 84  ;  ncsjr(4,1) = 59 
158            !                                        ! ================================
159         CASE ( 025 )                                ! ORCA_R025 extended configuration
160            !                                        ! ================================
161            ncsnr(1)   = 1    ; ncstt(1)   = 0               ! Caspian sea
162            ncsi1(1)   = 1330 ; ncsj1(1)   = 831
163            ncsi2(1)   = 1375 ; ncsj2(1)   = 981
164            ncsir(1,1) = 1    ; ncsjr(1,1) = 1
165            !                                       
166            ncsnr(2)   = 1    ; ncstt(2)   = 0               ! Aral sea
167            ncsi1(2)   = 1376 ; ncsj1(2)   = 900
168            ncsi2(2)   = 1400 ; ncsj2(2)   = 981
169            ncsir(2,1) = 1    ; ncsjr(2,1) = 1
170            !                                       
171            ncsnr(3)   = 1    ; ncstt(3)   = 0               ! Azov Sea
172            ncsi1(3)   = 1284 ; ncsj1(3)   = 908
173            ncsi2(3)   = 1304 ; ncsj2(3)   = 933
174            ncsir(3,1) = 1    ; ncsjr(3,1) = 1
175            !
176            ncsnr(4)   = 1    ; ncstt(4)   = 0               ! Lake Superior 
177            ncsi1(4)   = 781  ; ncsj1(4)   = 904 
178            ncsi2(4)   = 815  ; ncsj2(4)   = 926 
179            ncsir(4,1) = 1    ; ncsjr(4,1) = 1 
180            !
181            ncsnr(5)   = 1    ; ncstt(5)   = 0               ! Lake Michigan
182            ncsi1(5)   = 795  ; ncsj1(5)   = 871             
183            ncsi2(5)   = 813  ; ncsj2(5)   = 905 
184            ncsir(5,1) = 1    ; ncsjr(5,1) = 1 
185            !
186            ncsnr(6)   = 1    ; ncstt(6)   = 0               ! Lake Huron part 1
187            ncsi1(6)   = 814  ; ncsj1(6)   = 882             
188            ncsi2(6)   = 825  ; ncsj2(6)   = 905 
189            ncsir(6,1) = 1    ; ncsjr(6,1) = 1 
190            !
191            ncsnr(7)   = 1    ; ncstt(7)   = 0               ! Lake Huron part 2
192            ncsi1(7)   = 826  ; ncsj1(7)   = 889             
193            ncsi2(7)   = 833  ; ncsj2(7)   = 905 
194            ncsir(7,1) = 1    ; ncsjr(7,1) = 1 
195            !
196            ncsnr(8)   = 1    ; ncstt(8)   = 0               ! Lake Erie
197            ncsi1(8)   = 816  ; ncsj1(8)   = 871             
198            ncsi2(8)   = 837  ; ncsj2(8)   = 881 
199            ncsir(8,1) = 1    ; ncsjr(8,1) = 1 
200            !
201            ncsnr(9)   = 1    ; ncstt(9)   = 0               ! Lake Ontario
202            ncsi1(9)   = 831  ; ncsj1(9)   = 882             
203            ncsi2(9)   = 847  ; ncsj2(9)   = 889 
204            ncsir(9,1) = 1    ; ncsjr(9,1) = 1 
205            !
206            ncsnr(10)   = 1    ; ncstt(10)   = 0               ! Lake Victoria 
207            ncsi1(10)   = 1274 ; ncsj1(10)   = 672 
208            ncsi2(10)   = 1289 ; ncsj2(10)   = 687 
209            ncsir(10,1) = 1    ; ncsjr(10,1) = 1 
210            !
211         END SELECT
212         !
213      ENDIF
214
215      ! convert the position in local domain indices
216      ! --------------------------------------------
217      DO jc = 1, jpncs
218         ncsi1(jc)   = mi0( ncsi1(jc) )
219         ncsj1(jc)   = mj0( ncsj1(jc) )
220
221         ncsi2(jc)   = mi1( ncsi2(jc) )   
222         ncsj2(jc)   = mj1( ncsj2(jc) ) 
223      END DO
224      !
225   END SUBROUTINE dom_clo
226
227
228   SUBROUTINE sbc_clo( kt )
229      !!---------------------------------------------------------------------
230      !!                  ***  ROUTINE sbc_clo  ***
231      !!                   
232      !! ** Purpose :   Special handling of closed seas
233      !!
234      !! ** Method  :   Water flux is forced to zero over closed sea
235      !!      Excess is shared between remaining ocean, or
236      !!      put as run-off in open ocean.
237      !!
238      !! ** Action  :   emp updated surface freshwater fluxes and associated heat content at kt
239      !!----------------------------------------------------------------------
240      INTEGER, INTENT(in) ::   kt   ! ocean model time step
241      !
242      INTEGER             ::   ji, jj, jc, jn   ! dummy loop indices
243      REAL(wp), PARAMETER ::   rsmall = 1.e-20_wp    ! Closed sea correction epsilon
244      REAL(wp)            ::   zze2, ztmp, zcorr     !
245      REAL(wp)            ::   zcoef, zcoef1         !
246      COMPLEX(wp)         ::   ctmp 
247      REAL(wp), DIMENSION(jpncs) ::   zfwf   ! 1D workspace
248      !!----------------------------------------------------------------------
249      !
250      IF( nn_timing == 1 )  CALL timing_start('sbc_clo')
251      !                                                   !------------------!
252      IF( kt == nit000 ) THEN                             !  Initialisation  !
253         !                                                !------------------!
254         IF(lwp) WRITE(numout,*)
255         IF(lwp) WRITE(numout,*)'sbc_clo : closed seas '
256         IF(lwp) WRITE(numout,*)'~~~~~~~'
257
258         surf(:) = 0.e0_wp
259         !
260         surf(jpncs+1) = glob_sum( e1e2t(:,:) )   ! surface of the global ocean
261         !
262         !                                        ! surface of closed seas
263         IF( lk_mpp_rep ) THEN                         ! MPP reproductible calculation
264            DO jc = 1, jpncs
265               ctmp = CMPLX( 0.e0, 0.e0, wp )
266               DO jj = ncsj1(jc), ncsj2(jc)
267                  DO ji = ncsi1(jc), ncsi2(jc)
268                     ztmp = e1e2t(ji,jj) * tmask_i(ji,jj)
269                     CALL DDPDD( CMPLX( ztmp, 0.e0, wp ), ctmp )
270                  END DO
271               END DO
272               IF( lk_mpp )   CALL mpp_sum( ctmp )
273               surf(jc) = REAL(ctmp,wp)
274            END DO
275         ELSE                                          ! Standard calculation           
276            DO jc = 1, jpncs
277               DO jj = ncsj1(jc), ncsj2(jc)
278                  DO ji = ncsi1(jc), ncsi2(jc)
279                     surf(jc) = surf(jc) + e1e2t(ji,jj) * tmask_i(ji,jj)      ! surface of closed seas
280                  END DO
281               END DO
282            END DO
283            IF( lk_mpp )   CALL mpp_sum ( surf, jpncs )       ! mpp: sum over all the global domain
284         ENDIF
285
286         IF(lwp) WRITE(numout,*)'     Closed sea surfaces'
287         DO jc = 1, jpncs
288            IF(lwp)WRITE(numout,FMT='(1I3,4I4,5X,F16.2)') jc, ncsi1(jc), ncsi2(jc), ncsj1(jc), ncsj2(jc), surf(jc)
289         END DO
290
291         ! jpncs+1 : surface of sea, closed seas excluded
292         DO jc = 1, jpncs
293            surf(jpncs+1) = surf(jpncs+1) - surf(jc)
294         END DO           
295         !
296      ENDIF
297      !                                                   !--------------------!
298      !                                                   !  update emp        !
299      zfwf = 0.e0_wp                                      !--------------------!
300      IF( lk_mpp_rep ) THEN                         ! MPP reproductible calculation
301         DO jc = 1, jpncs
302            ctmp = CMPLX( 0.e0, 0.e0, wp )
303            DO jj = ncsj1(jc), ncsj2(jc)
304               DO ji = ncsi1(jc), ncsi2(jc)
305                  ztmp = e1e2t(ji,jj) * ( emp(ji,jj)-rnf(ji,jj) ) * tmask_i(ji,jj)
306                  CALL DDPDD( CMPLX( ztmp, 0.e0, wp ), ctmp )
307               END DO 
308            END DO
309            IF( lk_mpp )   CALL mpp_sum( ctmp )
310            zfwf(jc) = REAL(ctmp,wp)
311         END DO
312      ELSE                                          ! Standard calculation           
313         DO jc = 1, jpncs
314            DO jj = ncsj1(jc), ncsj2(jc)
315               DO ji = ncsi1(jc), ncsi2(jc)
316                  zfwf(jc) = zfwf(jc) + e1e2t(ji,jj) * ( emp(ji,jj)-rnf(ji,jj) ) * tmask_i(ji,jj) 
317               END DO 
318            END DO
319         END DO
320         IF( lk_mpp )   CALL mpp_sum ( zfwf(:) , jpncs )       ! mpp: sum over all the global domain
321      ENDIF
322
323      IF( cp_cfg == "orca" .AND. jp_cfg == 2 ) THEN      ! Black Sea case for ORCA_R2 configuration
324         zze2    = ( zfwf(3) + zfwf(4) ) * 0.5_wp
325         zfwf(3) = zze2
326         zfwf(4) = zze2
327      ENDIF
328
329      zcorr = 0._wp
330
331      DO jc = 1, jpncs
332         !
333         ! The following if avoids the redistribution of the round off
334         IF ( ABS(zfwf(jc) / surf(jpncs+1) ) > rsmall) THEN
335            !
336            IF( ncstt(jc) == 0 ) THEN           ! water/evap excess is shared by all open ocean
337               zcoef    = zfwf(jc) / surf(jpncs+1)
338               zcoef1   = rcp * zcoef
339               emp(:,:) = emp(:,:) + zcoef
340               qns(:,:) = qns(:,:) - zcoef1 * sst_m(:,:)
341               ! accumulate closed seas correction
342               zcorr    = zcorr    + zcoef
343               !
344            ELSEIF( ncstt(jc) == 1 ) THEN       ! Excess water in open sea, at outflow location, excess evap shared
345               IF ( zfwf(jc) <= 0.e0_wp ) THEN
346                   DO jn = 1, ncsnr(jc)
347                     ji = mi0(ncsir(jc,jn))
348                     jj = mj0(ncsjr(jc,jn)) ! Location of outflow in open ocean
349                     IF (      ji > 1 .AND. ji < jpi   &
350                         .AND. jj > 1 .AND. jj < jpj ) THEN
351                         zcoef      = zfwf(jc) / ( REAL(ncsnr(jc)) * e1e2t(ji,jj) )
352                         zcoef1     = rcp * zcoef
353                         emp(ji,jj) = emp(ji,jj) + zcoef
354                         qns(ji,jj) = qns(ji,jj) - zcoef1 * sst_m(ji,jj)
355                     ENDIF
356                   END DO
357               ELSE
358                   zcoef    = zfwf(jc) / surf(jpncs+1)
359                   zcoef1   = rcp * zcoef
360                   emp(:,:) = emp(:,:) + zcoef
361                   qns(:,:) = qns(:,:) - zcoef1 * sst_m(:,:)
362                   ! accumulate closed seas correction
363                   zcorr    = zcorr    + zcoef
364               ENDIF
365            ELSEIF( ncstt(jc) == 2 ) THEN       ! Excess e-p-r (either sign) goes to open ocean, at outflow location
366               DO jn = 1, ncsnr(jc)
367                  ji = mi0(ncsir(jc,jn))
368                  jj = mj0(ncsjr(jc,jn)) ! Location of outflow in open ocean
369                  IF(      ji > 1 .AND. ji < jpi    &
370                     .AND. jj > 1 .AND. jj < jpj ) THEN
371                     zcoef      = zfwf(jc) / ( REAL(ncsnr(jc)) *  e1e2t(ji,jj) )
372                     zcoef1     = rcp * zcoef
373                     emp(ji,jj) = emp(ji,jj) + zcoef
374                     qns(ji,jj) = qns(ji,jj) - zcoef1 * sst_m(ji,jj)
375                  ENDIF
376               END DO
377            ENDIF 
378            !
379            DO jj = ncsj1(jc), ncsj2(jc)
380               DO ji = ncsi1(jc), ncsi2(jc)
381                  zcoef      = zfwf(jc) / surf(jc)
382                  zcoef1     = rcp * zcoef
383                  emp(ji,jj) = emp(ji,jj) - zcoef
384                  qns(ji,jj) = qns(ji,jj) + zcoef1 * sst_m(ji,jj)
385               END DO 
386            END DO 
387            !
388         END IF
389      END DO
390
391      IF ( ABS(zcorr) > rsmall ) THEN      ! remove the global correction from the closed seas
392         DO jc = 1, jpncs                  ! only if it is large enough
393            DO jj = ncsj1(jc), ncsj2(jc)
394               DO ji = ncsi1(jc), ncsi2(jc)
395                  emp(ji,jj) = emp(ji,jj) - zcorr
396                  qns(ji,jj) = qns(ji,jj) + rcp * zcorr * sst_m(ji,jj)
397               END DO 
398             END DO
399          END DO
400      ENDIF
401      !
402      emp (:,:) = emp (:,:) * tmask(:,:,1)
403      !
404      CALL lbc_lnk( emp , 'T', 1._wp )
405      !
406      IF(lwp .AND. lflush) CALL flush(numout)
407      !
408      IF( nn_timing == 1 )  CALL timing_stop('sbc_clo')
409      !
410   END SUBROUTINE sbc_clo
411
412
413   SUBROUTINE clo_rnf( p_rnfmsk )
414      !!---------------------------------------------------------------------
415      !!                  ***  ROUTINE sbc_rnf  ***
416      !!                   
417      !! ** Purpose :   allow the treatment of closed sea outflow grid-points
418      !!                to be the same as river mouth grid-points
419      !!
420      !! ** Method  :   set to 1 the runoff mask (mskrnf, see sbcrnf module)
421      !!                at the closed sea outflow grid-point.
422      !!
423      !! ** Action  :   update (p_)mskrnf (set 1 at closed sea outflow)
424      !!----------------------------------------------------------------------
425      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   p_rnfmsk   ! river runoff mask (rnfmsk array)
426      !
427      INTEGER  ::   jc, jn, ji, jj      ! dummy loop indices
428      !!----------------------------------------------------------------------
429      !
430      DO jc = 1, jpncs
431         IF( ncstt(jc) >= 1 ) THEN            ! runoff mask set to 1 at closed sea outflows
432             DO jn = 1, 4
433                DO jj =    mj0( ncsjr(jc,jn) ), mj1( ncsjr(jc,jn) )
434                   DO ji = mi0( ncsir(jc,jn) ), mi1( ncsir(jc,jn) )
435                      p_rnfmsk(ji,jj) = MAX( p_rnfmsk(ji,jj), 1.0_wp )
436                   END DO
437                END DO
438            END DO
439         ENDIF
440      END DO 
441      !
442   END SUBROUTINE clo_rnf
443
444   
445   SUBROUTINE clo_ups( p_upsmsk )
446      !!---------------------------------------------------------------------
447      !!                  ***  ROUTINE sbc_rnf  ***
448      !!                   
449      !! ** Purpose :   allow the treatment of closed sea outflow grid-points
450      !!                to be the same as river mouth grid-points
451      !!
452      !! ** Method  :   set to 0.5 the upstream mask (upsmsk, see traadv_cen2
453      !!                module) over the closed seas.
454      !!
455      !! ** Action  :   update (p_)upsmsk (set 0.5 over closed seas)
456      !!----------------------------------------------------------------------
457      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   p_upsmsk   ! upstream mask (upsmsk array)
458      !
459      INTEGER  ::   jc, ji, jj      ! dummy loop indices
460      !!----------------------------------------------------------------------
461      !
462      DO jc = 1, jpncs
463         DO jj = ncsj1(jc), ncsj2(jc)
464            DO ji = ncsi1(jc), ncsi2(jc)
465               p_upsmsk(ji,jj) = 0.5_wp         ! mixed upstream/centered scheme over closed seas
466            END DO
467         END DO
468       END DO 
469       !
470   END SUBROUTINE clo_ups
471   
472     
473   SUBROUTINE clo_bat( pbat, kbat )
474      !!---------------------------------------------------------------------
475      !!                  ***  ROUTINE clo_bat  ***
476      !!                   
477      !! ** Purpose :   suppress closed sea from the domain
478      !!
479      !! ** Method  :   set to 0 the meter and level bathymetry (given in
480      !!                arguments) over the closed seas.
481      !!
482      !! ** Action  :   set pbat=0 and kbat=0 over closed seas
483      !!----------------------------------------------------------------------
484      REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) ::   pbat   ! bathymetry in meters (bathy array)
485      INTEGER , DIMENSION(jpi,jpj), INTENT(inout) ::   kbat   ! bathymetry in levels (mbathy array)
486      !
487      INTEGER  ::   jc, ji, jj      ! dummy loop indices
488      !!----------------------------------------------------------------------
489      !
490      DO jc = 1, jpncs
491         DO jj = ncsj1(jc), ncsj2(jc)
492            DO ji = ncsi1(jc), ncsi2(jc)
493               pbat(ji,jj) = 0._wp   
494               kbat(ji,jj) = 0   
495            END DO
496         END DO
497       END DO 
498       !
499   END SUBROUTINE clo_bat
500
501   !!======================================================================
502END MODULE closea
503
Note: See TracBrowser for help on using the repository browser.