1 | MODULE med_red_seas |
---|
2 | |
---|
3 | USE utils |
---|
4 | |
---|
5 | IMPLICIT NONE |
---|
6 | PUBLIC |
---|
7 | |
---|
8 | CONTAINS |
---|
9 | |
---|
10 | SUBROUTINE med_red_dmp(presto) |
---|
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 |
---|
19 | REAL(8), DIMENSION(:,:), ALLOCATABLE :: zmrs |
---|
20 | REAL(8) :: zhfac, zsdmp, zbdmp |
---|
21 | REAL(8), DIMENSION(jpi,jpj), INTENT(inout) :: presto |
---|
22 | |
---|
23 | WRITE(numout,*) 'ORCA Med and Red Seas Damping' |
---|
24 | |
---|
25 | ALLOCATE( zmrs(jpi, jpj) ) |
---|
26 | ! |
---|
27 | zmrs(:,:) = 0. |
---|
28 | ! |
---|
29 | SELECT CASE ( jp_cfg ) |
---|
30 | ! ! ======================= |
---|
31 | CASE ( 4 ) ! ORCA_R4 configuration |
---|
32 | ! ! ======================= |
---|
33 | ij0 = 50 ; ij1 = 56 ! Mediterranean Sea |
---|
34 | |
---|
35 | ii0 = 81 ; ii1 = 91 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1. |
---|
36 | ij0 = 50 ; ij1 = 55 |
---|
37 | ii0 = 75 ; ii1 = 80 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1. |
---|
38 | ij0 = 52 ; ij1 = 53 |
---|
39 | ii0 = 70 ; ii1 = 74 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1. |
---|
40 | ! |
---|
41 | ! ! ======================= |
---|
42 | CASE ( 2 ) ! ORCA_R2 configuration |
---|
43 | ! ! ======================= |
---|
44 | ij0 = 96 ; ij1 = 110 ! Mediterranean Sea |
---|
45 | ii0 = 157 ; ii1 = 181 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1. |
---|
46 | ij0 = 100 ; ij1 = 110 |
---|
47 | ii0 = 144 ; ii1 = 156 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1. |
---|
48 | ij0 = 100 ; ij1 = 103 |
---|
49 | ii0 = 139 ; ii1 = 143 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1. |
---|
50 | ! |
---|
51 | ij0 = 101 ; ij1 = 102 ! Decrease before Gibraltar Strait |
---|
52 | ii0 = 139 ; ii1 = 141 ; zmrs( ii0:ii1 , ij0:ij1 ) = 0. |
---|
53 | ii0 = 142 ; ii1 = 142 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1. / 90. |
---|
54 | ii0 = 143 ; ii1 = 143 ; zmrs( ii0:ii1 , ij0:ij1 ) = 0.40 |
---|
55 | ii0 = 144 ; ii1 = 144 ; zmrs( ii0:ii1 , ij0:ij1 ) = 0.75 |
---|
56 | ! |
---|
57 | ij0 = 87 ; ij1 = 96 ! Red Sea |
---|
58 | ii0 = 147 ; ii1 = 163 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1. |
---|
59 | ! |
---|
60 | ij0 = 91 ; ij1 = 91 ! Decrease before Bab el Mandeb Strait |
---|
61 | ii0 = 153 ; ii1 = 160 ; zmrs( ii0:ii1 , ij0:ij1 ) = 0.80 |
---|
62 | ij0 = 90 ; ij1 = 90 |
---|
63 | ii0 = 153 ; ii1 = 160 ; zmrs( ii0:ii1 , ij0:ij1 ) = 0.40 |
---|
64 | ij0 = 89 ; ij1 = 89 |
---|
65 | ii0 = 158 ; ii1 = 160 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1. / 90. |
---|
66 | ij0 = 88 ; ij1 = 88 |
---|
67 | ii0 = 160 ; ii1 = 163 ; zmrs( ii0:ii1 , ij0:ij1 ) = 0. |
---|
68 | ! |
---|
69 | ! ! ======================= |
---|
70 | CASE ( 05 ) ! ORCA_R05 configuration |
---|
71 | ! ! ======================= |
---|
72 | ii0 = 568 ; ii1 = 574 ! Mediterranean Sea |
---|
73 | ij0 = 324 ; ij1 = 333 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1. |
---|
74 | ii0 = 575 ; ii1 = 658 |
---|
75 | ij0 = 314 ; ij1 = 366 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1. |
---|
76 | ! |
---|
77 | ii0 = 641 ; ii1 = 651 ! Black Sea (remaining part |
---|
78 | ij0 = 367 ; ij1 = 372 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1. |
---|
79 | ! |
---|
80 | ij0 = 324 ; ij1 = 333 ! Decrease before Gibraltar Strait |
---|
81 | ii0 = 565 ; ii1 = 565 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1. / 90. |
---|
82 | ii0 = 566 ; ii1 = 566 ; zmrs( ii0:ii1 , ij0:ij1 ) = 0.40 |
---|
83 | ii0 = 567 ; ii1 = 567 ; zmrs( ii0:ii1 , ij0:ij1 ) = 0.75 |
---|
84 | ! |
---|
85 | ii0 = 641 ; ii1 = 665 ! Red Sea |
---|
86 | ij0 = 270 ; ij1 = 310 ; zmrs( ii0:ii1 , ij0:ij1 ) = 1. |
---|
87 | ! |
---|
88 | ii0 = 666 ; ii1 = 675 ! Decrease before Bab el Mandeb Strait |
---|
89 | ij0 = 270 ; ij1 = 290 |
---|
90 | DO ji = ii0, ii1 |
---|
91 | zmrs( ji , ij0:ij1 ) = 0.1 * ABS( FLOAT(ji - ii1) ) |
---|
92 | END DO |
---|
93 | ! ! ======================== |
---|
94 | CASE ( 025 ) ! ORCA_R025 configuration |
---|
95 | ! ! ======================== |
---|
96 | WRITE(numerr,*) ' Mediterranean and Red Sea damping option not implemented for ORCA_R025' |
---|
97 | WRITE(numerr,*) ' Set ln_med_red = .false.' |
---|
98 | STOP |
---|
99 | ! |
---|
100 | END SELECT |
---|
101 | |
---|
102 | ! Note that the original "online" code had a dependency on model levels |
---|
103 | ! here (as opposed to depth) |
---|
104 | ! This has been removed but can be reproduced using the "custom" module |
---|
105 | ! if required |
---|
106 | zsdmp = 1. / ( pn_surf * rday ) |
---|
107 | zbdmp = 1. / ( pn_bot * rday ) |
---|
108 | zhfac = ( zbdmp + (zsdmp-zbdmp) * EXP( -gdept(1,1)/pn_dep ) ) |
---|
109 | |
---|
110 | presto(:,:) = zmrs(:,:) * zhfac + ( 1. - zmrs(:,:) ) * presto(:,:) |
---|
111 | |
---|
112 | DEALLOCATE( zmrs ) |
---|
113 | |
---|
114 | END SUBROUTINE med_red_dmp |
---|
115 | |
---|
116 | |
---|
117 | END MODULE med_red_seas |
---|