[6717] | 1 | MODULE usrdef_fmask |
---|
| 2 | !!====================================================================== |
---|
[6923] | 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 |
---|
[6717] | 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 | !!---------------------------------------------------------------------- |
---|
[9598] | 29 | !! NEMO/OCE 4.0 , NEMO Consortium (2018) |
---|
[10068] | 30 | !! $Id$ |
---|
| 31 | !! Software governed by the CeCILL license (see ./LICENSE) |
---|
[6717] | 32 | !!---------------------------------------------------------------------- |
---|
| 33 | CONTAINS |
---|
| 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 | !!---------------------------------------------------------------------- |
---|
[6979] | 51 | CHARACTER(len=*) , INTENT(in ) :: cd_cfg ! configuration name |
---|
[6717] | 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 | ! |
---|
[13435] | 60 | IF( TRIM( cd_cfg ) == "orca" .OR. TRIM( cd_cfg ) == "ORCA" ) THEN !== ORCA Configurations ==! |
---|
[6717] | 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 ' |
---|
[13286] | 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 |
---|
[6717] | 76 | ! |
---|
| 77 | IF(lwp) WRITE(numout,*) ' Bab el Mandeb ' |
---|
[13286] | 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 |
---|
[6717] | 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 | ! |
---|
[13286] | 100 | isrow = 332 - (Nj0glo + 1) ! was 332 - jpjglo -> jpjglo_old_version = Nj0glo + 1 |
---|
[6717] | 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 ' |
---|
[13286] | 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 |
---|
[6717] | 108 | ! |
---|
| 109 | IF(lwp) WRITE(numout,*) ' Bhosporus ' |
---|
[13286] | 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 |
---|
[6717] | 113 | ! |
---|
| 114 | IF(lwp) WRITE(numout,*) ' Makassar (Top) ' |
---|
[13286] | 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 |
---|
[6717] | 118 | ! |
---|
| 119 | IF(lwp) WRITE(numout,*) ' Lombok ' |
---|
[13286] | 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 |
---|
[6717] | 123 | ! |
---|
| 124 | IF(lwp) WRITE(numout,*) ' Ombai ' |
---|
[13286] | 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 |
---|
[6717] | 128 | ! |
---|
| 129 | IF(lwp) WRITE(numout,*) ' Timor Passage ' |
---|
[13286] | 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 |
---|
[6717] | 133 | ! |
---|
| 134 | IF(lwp) WRITE(numout,*) ' West Halmahera ' |
---|
[13286] | 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 |
---|
[6717] | 138 | ! |
---|
| 139 | IF(lwp) WRITE(numout,*) ' East Halmahera ' |
---|
[13286] | 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 |
---|
[6717] | 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 | ! |
---|
[10425] | 155 | CALL lbc_lnk( 'usrdef_fmask', pfmsk, 'F', 1._wp ) ! Lateral boundary conditions on fmask |
---|
[6717] | 156 | ! |
---|
| 157 | END SUBROUTINE usr_def_fmask |
---|
| 158 | |
---|
| 159 | !!====================================================================== |
---|
| 160 | END MODULE usrdef_fmask |
---|