source: NEMO/branches/2020/dev_r12558_HPC-08_epico_Extra_Halo/src/OCE/USR/usrdef_fmask.F90

Last change on this file was 13138, checked in by smasson, 4 months ago

Extra_Halo: minor bugfixes and cleaning, see #2366

  • Property svn:keywords set to Id
File size: 8.6 KB
Line 
1MODULE usrdef_fmask
2   !!======================================================================
3   !!                     ***  MODULE usrdef_fmask   ***
4   !!
5   !!                      ===  ORCA configuration  ===
6   !!                            (2 and 1 degrees)
7   !!
8   !! User defined : alteration of land/sea f-point mask in some straits
9   !!======================================================================
10   !! History :  4.0  ! 2016-06  (G. Madec, S. Flavoni)  Original code
11   !!----------------------------------------------------------------------
12
13   !!----------------------------------------------------------------------
14   !!   usr_def_fmask  : alteration of f-point land/ocean mask in some straits
15   !!----------------------------------------------------------------------
16   USE oce             ! ocean dynamics and tracers
17   USE dom_oce         ! ocean space and time domain
18   !
19   USE in_out_manager  ! I/O manager
20   USE lbclnk          ! ocean lateral boundary conditions (or mpp link)
21   USE lib_mpp         ! Massively Parallel Processing library
22
23   IMPLICIT NONE
24   PRIVATE
25
26   PUBLIC   usr_def_fmask    ! routine called by dommsk.F90
27
28   !!----------------------------------------------------------------------
29   !! NEMO/OCE 4.0 , NEMO Consortium (2018)
30   !! $Id$
31   !! Software governed by the CeCILL license (see ./LICENSE)
32   !!----------------------------------------------------------------------
33CONTAINS
34
35   SUBROUTINE usr_def_fmask( cd_cfg, kcfg, pfmsk )
36      !!---------------------------------------------------------------------
37      !!                 ***  ROUTINE dom_msk  ***
38      !!
39      !! ** Purpose :   User defined alteration of the lateral boundary
40      !!              condition on velocity.
41      !!
42      !! ** Method  :   Local change of the value of fmask at lateral ocean/land
43      !!              boundary in straits in order to increase the viscous
44      !!              boundary layer and thus reduce the transport through the
45      !!              corresponding straits.
46      !!                Here only alterations in ORCA R2 and R1 cases
47      !!
48      !! ** Action :   fmask : land/ocean mask at f-point with increased value
49      !!                       in some user defined straits
50      !!----------------------------------------------------------------------
51      CHARACTER(len=*)          , INTENT(in   ) ::   cd_cfg   ! configuration name
52      INTEGER                   , INTENT(in   ) ::   kcfg     ! configuration identifier
53      REAL(wp), DIMENSION(:,:,:), INTENT(inout) ::   pfmsk    ! Ocean/Land f-point mask including lateral boundary cond.
54      !
55      INTEGER  ::   iif, iil, ii0, ii1, ii   ! local integers
56      INTEGER  ::   ijf, ijl, ij0, ij1       !   -       -
57      INTEGER  ::   isrow                    ! index for ORCA1 starting row
58      !!----------------------------------------------------------------------
59      !
60      IF( TRIM( cd_cfg ) == "orca" ) THEN      !==  ORCA Configurations  ==!
61         !
62         SELECT CASE ( kcfg )
63         !
64         CASE( 2 )                           !  R2 case
65            IF(lwp) WRITE(numout,*)
66            IF(lwp) WRITE(numout,*) 'usr_def_fmask : ORCA_R2: increase lateral friction near the following straits:'
67            IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~'
68            !
69            IF(lwp) WRITE(numout,*) '      Gibraltar '
70            ij0 = 101 + nn_hls       ;   ij1 = 101 + nn_hls           ! Gibraltar strait  : partial slip (pfmsk=0.5)
71            ii0 = 139 + nn_hls - 1   ;   ii1 = 140 + nn_hls - 1
72            pfmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) =  0.5_wp
73            ij0 = 102 + nn_hls       ;   ij1 = 102 + nn_hls
74            ii0 = 139 + nn_hls - 1   ;   ii1 = 140 + nn_hls - 1
75            pfmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) =  0.5_wp
76            !
77            IF(lwp) WRITE(numout,*) '      Bab el Mandeb '
78            ij0 =  87 + nn_hls       ;   ij1 = 88  + nn_hls          ! Bab el Mandeb : partial slip (pfmsk=1)
79            ii0 = 160 + nn_hls - 1   ;   ii1 = 160 + nn_hls - 1
80            pfmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) =  1._wp
81            ij0 =  88 + nn_hls       ;   ij1 =  88 + nn_hls
82            ii0 = 159 + nn_hls - 1   ;   ii1 = 159 + nn_hls - 1
83            pfmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) =  1._wp
84            !
85            ! We keep this as an example but it is instable in this case
86            !IF(lwp) WRITE(numout,*) '      Danish straits '
87            !         ij0 = 115   ;   ij1 = 115 ! Danish straits  : strong slip (pfmsk > 2)
88            !         ii0 = 145   ;   ii1 = 146   ;   pfmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 4._wp
89            !         ij0 = 116   ;   ij1 = 116
90            !         ii0 = 145   ;   ii1 = 146   ;   pfmsk( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 1:jpk ) = 4._wp
91            !
92         CASE( 1 )                           ! R1 case
93            IF(lwp) WRITE(numout,*)
94            IF(lwp) WRITE(numout,*) 'usr_def_fmask : ORCA_R1: increase lateral friction near the following straits:'
95            IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~'   
96!!gm    ! This dirty section will be suppressed by simplification process:
97!!gm    ! all this will come back in input files
98!!gm    ! Currently these hard-wired indices relate to configuration with extend grid (jpjglo=332)
99            !
100            isrow = 332 - (Nj0glo + 1)   ! was 332 - jpjglo -> jpjglo_old_version = Nj0glo + 1
101            !
102            IF(lwp) WRITE(numout,*)
103            IF(lwp) WRITE(numout,*) '   orca_r1: increase friction near the following straits : '
104            IF(lwp) WRITE(numout,*) '      Gibraltar '
105            ii0 = 282 + nn_hls - 1       ;   ii1 = 283 + nn_hls - 1        ! Gibraltar Strait
106            ij0 = 241 + nn_hls - isrow   ;   ij1 = 241 + nn_hls - isrow
107            pfmsk( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp 
108            !
109            IF(lwp) WRITE(numout,*) '      Bhosporus '
110            ii0 = 314 + nn_hls - 1       ;   ii1 = 315 + nn_hls - 1        ! Bhosporus Strait
111            ij0 = 248 + nn_hls - isrow   ;   ij1 = 248 + nn_hls - isrow
112            pfmsk( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp 
113            !
114            IF(lwp) WRITE(numout,*) '      Makassar (Top) '
115            ii0 =  48 + nn_hls - 1       ;   ii1 =  48 + nn_hls - 1        ! Makassar Strait (Top)
116            ij0 = 189 + nn_hls - isrow   ;   ij1 = 190 + nn_hls - isrow
117            pfmsk( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 3._wp 
118            !
119            IF(lwp) WRITE(numout,*) '      Lombok '
120            ii0 =  44 + nn_hls - 1       ;   ii1 =  44 + nn_hls - 1        ! Lombok Strait
121            ij0 = 164 + nn_hls - isrow   ;   ij1 = 165 + nn_hls - isrow
122            pfmsk( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp 
123            !
124            IF(lwp) WRITE(numout,*) '      Ombai '
125            ii0 =  53 + nn_hls - 1       ;   ii1 =  53 + nn_hls - 1        ! Ombai Strait
126            ij0 = 164 + nn_hls - isrow   ;   ij1 = 165 + nn_hls - isrow
127            pfmsk( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp 
128            !
129            IF(lwp) WRITE(numout,*) '      Timor Passage '
130            ii0 =  56 + nn_hls - 1       ;   ii1 =  56 + nn_hls - 1        ! Timor Passage
131            ij0 = 164 + nn_hls - isrow   ;   ij1 = 165 + nn_hls - isrow
132            pfmsk( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 2._wp 
133            !
134            IF(lwp) WRITE(numout,*) '      West Halmahera '
135            ii0 =  58 + nn_hls - 1       ;   ii1 =  58 + nn_hls - 1        ! West Halmahera Strait
136            ij0 = 181 + nn_hls - isrow   ;   ij1 = 182 + nn_hls - isrow
137            pfmsk( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 3._wp 
138            !
139            IF(lwp) WRITE(numout,*) '      East Halmahera '
140            ii0 =  55 + nn_hls - 1       ;   ii1 =  55 + nn_hls - 1        ! East Halmahera Strait
141            ij0 = 181 + nn_hls - isrow   ;   ij1 = 182 + nn_hls - isrow
142            pfmsk( mi0(ii0):mi1(ii1),mj0(ij0):mj1(ij1),1:jpk ) = 3._wp 
143            !
144         CASE DEFAULT
145            IF(lwp) WRITE(numout,*)
146            IF(lwp) WRITE(numout,*) 'usr_def_fmask : ORCA_R', kcfg,' : NO alteration of fmask in specific straits '
147            IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~'   
148         END SELECT
149      ELSE
150         IF(lwp) WRITE(numout,*)
151         IF(lwp) WRITE(numout,*) 'usr_def_fmask : NO alteration of fmask in specific straits '
152         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~'
153      ENDIF
154      !
155      CALL lbc_lnk( 'usrdef_fmask', pfmsk, 'F', 1._wp )      ! Lateral boundary conditions on fmask
156      !
157   END SUBROUTINE usr_def_fmask
158   
159   !!======================================================================
160END MODULE usrdef_fmask
Note: See TracBrowser for help on using the repository browser.