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.
med_red_seas.F90 in branches/2014/dev_r4650_UKMO3_masked_damping/NEMOGCM/TOOLS/DMP_TOOLS/src – NEMO

source: branches/2014/dev_r4650_UKMO3_masked_damping/NEMOGCM/TOOLS/DMP_TOOLS/src/med_red_seas.F90 @ 4738

Last change on this file since 4738 was 4738, checked in by timgraham, 10 years ago

Modified tra_dmp module to read in restoration coefficient from a netcdf file

Added a tool to create the netcdf file - this replaces all of the hard coded resolution dependencies in tra_dmp_init

File size: 5.4 KB
Line 
1MODULE 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
117END MODULE med_red_seas
Note: See TracBrowser for help on using the repository browser.