[4738] | 1 | MODULE med_red_seas |
---|
| 2 | |
---|
| 3 | USE utils |
---|
| 4 | |
---|
| 5 | IMPLICIT NONE |
---|
| 6 | PUBLIC |
---|
| 7 | |
---|
| 8 | CONTAINS |
---|
| 9 | |
---|
[4739] | 10 | SUBROUTINE med_red_dmp(presto, jk, ln_31_lev) |
---|
[4738] | 11 | !!------------------------------------ |
---|
| 12 | !! **ROUTINE: med_red_dmp |
---|
| 13 | !! |
---|
| 14 | !! **Purpose: Apply specific modifications to damping coefficients on ORCA |
---|
| 15 | !! grids in Med and Red Seas |
---|
| 16 | !! |
---|
| 17 | !!----------------------------------- |
---|
| 18 | INTEGER :: ij0,ij1,ii0,ii1,ji,jj |
---|
[4739] | 19 | INTEGER, INTENT(in) :: jk |
---|
| 20 | REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zmrs |
---|
| 21 | REAL(wp) :: zhfac, zsdmp, zbdmp |
---|
| 22 | REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: presto |
---|
| 23 | LOGICAL, INTENT(in), OPTIONAL :: ln_31_lev |
---|
| 24 | LOGICAL :: l_31_lev |
---|
[4738] | 25 | |
---|
| 26 | WRITE(numout,*) 'ORCA Med and Red Seas Damping' |
---|
| 27 | |
---|
[4739] | 28 | IF ( PRESENT(ln_31_lev)) THEN |
---|
| 29 | l_31_lev = ln_31_lev |
---|
| 30 | ELSE |
---|
| 31 | l_31_lev = .false. |
---|
| 32 | ENDIF |
---|
| 33 | |
---|
[4738] | 34 | ALLOCATE( zmrs(jpi, jpj) ) |
---|
| 35 | ! |
---|
[4739] | 36 | zmrs(:,:) = 0._wp |
---|
[4738] | 37 | ! |
---|
| 38 | SELECT CASE ( jp_cfg ) |
---|
| 39 | ! ! ======================= |
---|
| 40 | CASE ( 4 ) ! ORCA_R4 configuration |
---|
| 41 | ! ! ======================= |
---|
| 42 | ij0 = 50 ; ij1 = 56 ! Mediterranean Sea |
---|
| 43 | |
---|
| 44 | ii0 = 81 ; ii1 = 91 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1. |
---|
| 45 | ij0 = 50 ; ij1 = 55 |
---|
| 46 | ii0 = 75 ; ii1 = 80 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1. |
---|
| 47 | ij0 = 52 ; ij1 = 53 |
---|
| 48 | ii0 = 70 ; ii1 = 74 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1. |
---|
| 49 | ! |
---|
| 50 | ! ! ======================= |
---|
| 51 | CASE ( 2 ) ! ORCA_R2 configuration |
---|
| 52 | ! ! ======================= |
---|
| 53 | ij0 = 96 ; ij1 = 110 ! Mediterranean Sea |
---|
[4739] | 54 | ii0 = 157 ; ii1 = 181 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1._wp |
---|
[4738] | 55 | ij0 = 100 ; ij1 = 110 |
---|
[4739] | 56 | ii0 = 144 ; ii1 = 156 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1._wp |
---|
[4738] | 57 | ij0 = 100 ; ij1 = 103 |
---|
[4739] | 58 | ii0 = 139 ; ii1 = 143 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1._wp |
---|
[4738] | 59 | ! |
---|
| 60 | ij0 = 101 ; ij1 = 102 ! Decrease before Gibraltar Strait |
---|
[4739] | 61 | ii0 = 139 ; ii1 = 141 ; zmrs( ii0:ii1 , ij0:ij1 ) = 0._wp |
---|
| 62 | ii0 = 142 ; ii1 = 142 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1._wp / 90._wp |
---|
| 63 | ii0 = 143 ; ii1 = 143 ; zmrs( ii0:ii1 , ij0:ij1 ) = 0.40_wp |
---|
| 64 | ii0 = 144 ; ii1 = 144 ; zmrs( ii0:ii1 , ij0:ij1 ) = 0.75_wp |
---|
[4738] | 65 | ! |
---|
| 66 | ij0 = 87 ; ij1 = 96 ! Red Sea |
---|
[4739] | 67 | ii0 = 147 ; ii1 = 163 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1._wp |
---|
[4738] | 68 | ! |
---|
| 69 | ij0 = 91 ; ij1 = 91 ! Decrease before Bab el Mandeb Strait |
---|
[4739] | 70 | ii0 = 153 ; ii1 = 160 ; zmrs( ii0:ii1 , ij0:ij1 ) = 0.80_wp |
---|
[4738] | 71 | ij0 = 90 ; ij1 = 90 |
---|
[4739] | 72 | ii0 = 153 ; ii1 = 160 ; zmrs( ii0:ii1 , ij0:ij1 ) = 0.40_wp |
---|
[4738] | 73 | ij0 = 89 ; ij1 = 89 |
---|
[4739] | 74 | ii0 = 158 ; ii1 = 160 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1._wp / 90._wp |
---|
[4738] | 75 | ij0 = 88 ; ij1 = 88 |
---|
[4739] | 76 | ii0 = 160 ; ii1 = 163 ; zmrs( ii0:ii1 , ij0:ij1 ) = 0._wp |
---|
[4738] | 77 | ! |
---|
| 78 | ! ! ======================= |
---|
| 79 | CASE ( 05 ) ! ORCA_R05 configuration |
---|
| 80 | ! ! ======================= |
---|
| 81 | ii0 = 568 ; ii1 = 574 ! Mediterranean Sea |
---|
[4739] | 82 | ij0 = 324 ; ij1 = 333 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1._wp |
---|
[4738] | 83 | ii0 = 575 ; ii1 = 658 |
---|
[4739] | 84 | ij0 = 314 ; ij1 = 366 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1._wp |
---|
[4738] | 85 | ! |
---|
| 86 | ii0 = 641 ; ii1 = 651 ! Black Sea (remaining part |
---|
[4739] | 87 | ij0 = 367 ; ij1 = 372 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1._wp |
---|
[4738] | 88 | ! |
---|
| 89 | ij0 = 324 ; ij1 = 333 ! Decrease before Gibraltar Strait |
---|
[4739] | 90 | ii0 = 565 ; ii1 = 565 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1._wp / 90._wp |
---|
| 91 | ii0 = 566 ; ii1 = 566 ; zmrs( ii0:ii1 , ij0:ij1 ) = 0.40_wp |
---|
| 92 | ii0 = 567 ; ii1 = 567 ; zmrs( ii0:ii1 , ij0:ij1 ) = 0.75_wp |
---|
[4738] | 93 | ! |
---|
| 94 | ii0 = 641 ; ii1 = 665 ! Red Sea |
---|
[4739] | 95 | ij0 = 270 ; ij1 = 310 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1._wp |
---|
[4738] | 96 | ! |
---|
| 97 | ii0 = 666 ; ii1 = 675 ! Decrease before Bab el Mandeb Strait |
---|
| 98 | ij0 = 270 ; ij1 = 290 |
---|
| 99 | DO ji = ii0, ii1 |
---|
[4739] | 100 | zmrs( ji , ij0:ij1 ) = 0.1_wp * ABS( FLOAT(ji - ii1) ) |
---|
[4738] | 101 | END DO |
---|
| 102 | ! ! ======================== |
---|
| 103 | CASE ( 025 ) ! ORCA_R025 configuration |
---|
| 104 | ! ! ======================== |
---|
| 105 | WRITE(numerr,*) ' Mediterranean and Red Sea damping option not implemented for ORCA_R025' |
---|
| 106 | WRITE(numerr,*) ' Set ln_med_red = .false.' |
---|
| 107 | STOP |
---|
| 108 | ! |
---|
| 109 | END SELECT |
---|
| 110 | |
---|
[4739] | 111 | zsdmp = 1._wp / ( pn_surf * rday ) |
---|
| 112 | zbdmp = 1._wp / ( pn_bot * rday ) |
---|
[4738] | 113 | |
---|
[4739] | 114 | ! The l_31_lev option is used to reproduce the old behaviour of |
---|
| 115 | ! defining the restoration coefficient based on the level number. |
---|
| 116 | ! This is included to allow damping coefficients for reference |
---|
| 117 | ! configurations to be kept the same. |
---|
| 118 | IF (l_31_lev) THEN |
---|
| 119 | IF (jk <= 17) THEN |
---|
| 120 | zhfac = 0.5_wp * ( 1. - COS( rpi * REAL(jk-1,wp) / 16._wp ) ) / rday |
---|
| 121 | ELSE |
---|
| 122 | zhfac = 1._wp / rday |
---|
| 123 | ENDIF |
---|
| 124 | ELSE |
---|
| 125 | zhfac = ( zbdmp + (zsdmp-zbdmp) * EXP( -gdept(1,1)/pn_dep ) ) |
---|
| 126 | ENDIF |
---|
[4738] | 127 | |
---|
[4739] | 128 | presto(:,:) = zmrs(:,:) * zhfac + ( 1._wp - zmrs(:,:) ) * presto(:,:) |
---|
| 129 | |
---|
[4738] | 130 | DEALLOCATE( zmrs ) |
---|
| 131 | |
---|
| 132 | END SUBROUTINE med_red_dmp |
---|
| 133 | |
---|
| 134 | |
---|
| 135 | END MODULE med_red_seas |
---|